Инкрементная строка с% name% + (num) в mysql - PullRequest
0 голосов
/ 08 сентября 2011

Есть ли способ реализовать этот алгоритм с MySQL без 100500 запросов и большого количества ресурсов?

if (exists %name% in table.name) {
    num = 2;
    while(exists %newname%+(num) in table.name) num++;
    %name% = newname+(num);
}

Спасибо

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

Самый простой способ сделать это - создать таблицу последовательных чисел. затем кросс присоединиться к нему ....

SELECT a.name,b.id 
FROM table a
WHERE a.name = 'somename'
CROSS JOIN atableofsequentialnumbers b
WHERE NOT EXISTS (SELECT 1 FROM table x WHERE x.name = CONCAT(a.name,b.id))
LIMIT 10

Это вернет первые 10 доступных номеров / имен

1 голос
/ 08 сентября 2011

Я не знаю, насколько лучше вы можете сделать с помощью хранимой процедуры в MySql, но вы определенно можете сделать лучше, чем 100500 запросов:

SELECT name FROM table WHERE name LIKE 'somename%' ORDER BY name DESC LIMIT 1

В этот момент вы знаете, что вы можете увеличивать число в конце name, и результат не будет использоваться.

Я закрашиваю мелкий шрифт (этот подход никогда не найдет и не заполнит какие-либо «дыры» в схеме именования, которые могут существовать, и все еще не гарантируется, что имя будет доступно из-за условий гонки), но в попрактиковаться в этом можно легко.

...