在mysql中使用%name%+(number)递增字符串

时间:2011-09-08 09:57:53

标签: mysql string algorithm increment

有没有办法用没有100500查询和大量资源的mysql实现这个算法?

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

由于

2 个答案:

答案 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个可用的数字/名称