У меня есть таблица в MariaDB в этой структуре,петли для генерации уникального URL-frinedly маршрута
CREATE TABLE `items` (
`id` char(36), `route` varchar(255), `value` text,
PRIMARY KEY (`id`),
UNIQUE KEY `route` (`route`)
)
я использую route
колонки, чтобы получить пользовательский friendy URL, такие как http://www.examle.com/this-is-the-route-of-an-item
Когда пользователь создает новый элемент, помимо пробелов и недопустимых символов, я хотел бы «поймать» случаи, когда маршрут, выбранный для нового элемента, используется, и создать правильный маршрут.
Например, если route-of-an-item
уже используется, я бы возврат к route-of-an-item-a
или route-of-an-item-b
и т.д.
Наивное решение может быть запрашивая дБ в цикле, например, (вид псевдокоде):
var additionalChars = "";
while (db.query("select count * from `items` where `route`='" + route + "-" + additionalChars + "'"))
additionalChars = nextAdditionalChars(additionalChars);
finalRoute = route + '-' + additionalChars;
Так как это вовлекает частое обращение к db, я думал о другом решении.
var additionalChars = "";
var usedRoutes = db.query("select `route` from `items` where `route` like '" + route + "%'");
while(usedRoutes.contains(route + '-' + additionalChars))
additionalChars = nextAdditionalChars(additionalChars);
finalRoute = route + '-' + additionalChars;
Есть ли лучший способ подойти к этой проблеме?
Правильно ли, что второе решение будет работать лучше?
Если я использую второе решение, должен ли я добавлять полнотекстовый указатель в поле маршрута?
Где 'nextAdditionalChars' определяется? –
Вы можете просто попробовать вставить его и поймать уникальное исключение индекса для db. Затем измените его и повторите попытку. Повторяйте, пока не достигнете успеха. – ojf
@TimBiegeleisen не определен. это всего лишь код pesudo. – MoLow