很难解释,让我举个例子。
如果用户名foo2
怎么弄成这样?
就像Col. Shrapnel所说的,自然增量似乎更明智。就像Windows中的“新建文件夹(3)”一样
发布于 2010-12-21 11:50:15
首先,锁定表,这样其他表就不会同时写入表。然后做这样的事情:
$name = 'foo';
$first_name = $name;
$i = 0;
do {
//Check in the database here
$exists = exists_in_database($name);
if($exists) {
$i++;
$name = $first_name . $i;
}
}while($exists);
//save $name另一种方法是选择表中的所有名称,以"foo“开头,以数字结尾,然后找到最大的数字。这可以在SQL中完成。
第一种方法更适合于只有较小的冲突风险的用例,因为模式匹配可能比较慢,但是如果有很多冲突,后者可能更好。
发布于 2010-12-21 12:05:05
首先,检查数据库中是否存在所需的用户名:
SELECT COUNT(*) AS numRows FROM table
WHERE SUBSTRING(username, 1, CHAR_LENGTH(desiredUserName)) = desiredUserName如果numRows为0,则可以保留用户名。如果是1,你可以在用户名的末尾加上'1‘。如果numRows > 1,它会变得更加复杂。您需要得到当前的最大值号,它附加了该用户名:
SELECT CAST(SUBSTRING(username,(CHAR_LENGTH(desiredUserName) + 1)) AS SIGNED) AS maxNum
FROM table
WHERE SUBSTRING(username,1,CHAR_LENGTH(desiredUserName)) = desiredUserName
ORDER BY CAST(SUBSTRING(username,(CHAR_LENGTH(desiredUserName) + 1)) AS SIGNED) DESC
LIMIT 1现在只需将1添加到返回的maxNum并将其附加到所需的用户名
发布于 2010-12-21 11:51:58
试试这个(你需要根据你的需要修改这个!)
$username_loop = $username = "foo"; // edit: compatibility to usernames n.e. "foo"
$count = 0;
while (){
$count++;
$query = "SELECT username FROM User WHERE username = ".$username_loop;
$result = mysql_query($query);
if ($result){
$username_loop = $username.$count;
}
else break;
}https://stackoverflow.com/questions/4498886
复制相似问题