如果名称存在,则保存为名称(1)名称(2),依此类推

时间:2011-05-12 13:31:55

标签: php mysql

有一个存储ID和名称的mysql数据库,当用户使用表单创建名称时,他们可以创建现有名称,因为唯一ID是ids,例如:

d49f2c32f9107c87c7bb7b44f1c8f297 name
2fa9c810fbe082900975f827e8ed9408 name

我想要做的是保存第二个“名字” - >插入数据库时​​“name(1)”。

到目前为止,我所拥有的就是这个想法

假设输入的名称是'name'

$input = 'name';

选择我们要从mysql数据库中检查的名称

mysql_query(SELECT * FROM  `table` WHERE  `name` =  '$input');

如果结果存在,则插入$input.'(1)'

我的问题是,如果名称存在,名称(1)也存在,那么如何在那里添加名称(2)......

5 个答案:

答案 0 :(得分:3)

您可以在数据库中返回具有该名称的人数,然后将1添加到该数字。

SELECT COUNT(id) FROM table WHERE name LIKE '$input(%)');

答案 1 :(得分:1)

$i = 1;
$sourceName = $name;
while( sql "SELECT COUNT(*) FROM table WHERE name = '$name'" ) {

  $name = $sourceName.' ('.$i.')';
  $i++;
}

此时你有最后的$name$i计算迭代次数)

答案 2 :(得分:0)

这样的事情可以解决问题:

SELECT * FROM table WHERE name = '$input' OR name LIKE '$input(%)'

请注意,要使其正常工作,您需要在LIKE子句中转义$input中的任何百分号,否则它们将被视为通配符。

答案 3 :(得分:0)

使用正则表达式检查字符串末尾两个括号之间的整数。如果存在整数,则为其添加1。

答案 4 :(得分:0)

您也可以尝试以相反的方式执行此操作,使name字段唯一并尝试在while循环中输入它,如果失败则添加($i)并每次执行$i++迭代。

//编辑: 使用进行like比较的解决方案的问题在于您会得到误报,例如$hi%也会计算hippie。这给你不必要的(1)添加!