有没有办法用没有100500查询和大量资源的mysql实现这个算法?
if (exists %name% in table.name) {
num = 2;
while(exists %newname%+(num) in table.name) num++;
%name% = newname+(num);
}
由于
答案 0 :(得分:1)
我不知道你可以用MySql中的存储过程做得多好,但你绝对可以比100500查询更好:
SELECT name FROM table WHERE name LIKE 'somename%' ORDER BY name DESC LIMIT 1
此时,您知道可以在name
末尾增加数字,结果将被取消。
我正在浏览一些细则(这种方法永远不会找到并填充可能存在的命名方案中的任何“漏洞”,并且仍然无法保证该名称将因种族条件而可用),但是实践它可以很容易地工作。
答案 1 :(得分:1)
我能看到的最简单的方法是创建一个序列表 然后交叉加入......
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个可用的数字/名称