首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果重复的话,我如何在用户名的末尾加上额外的号码?

如果重复的话,我如何在用户名的末尾加上额外的号码?
EN

Stack Overflow用户
提问于 2010-12-21 11:44:55
回答 8查看 2.4K关注 0票数 4

很难解释,让我举个例子。

如果用户名foo2

  • If foo已经存在于MySQL中,我希望php脚本允许它,但如果foo1也存在,则脚本将生成用户名,将生成的用户名为foo2

  • If foo2,然后成为foo3

怎么弄成这样?

就像Col. Shrapnel所说的,自然增量似乎更明智。就像Windows中的“新建文件夹(3)”一样

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-12-21 11:50:15

首先,锁定表,这样其他表就不会同时写入表。然后做这样的事情:

代码语言:javascript
复制
$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中完成。

第一种方法更适合于只有较小的冲突风险的用例,因为模式匹配可能比较慢,但是如果有很多冲突,后者可能更好。

票数 3
EN

Stack Overflow用户

发布于 2010-12-21 12:05:05

首先,检查数据库中是否存在所需的用户名:

代码语言:javascript
复制
SELECT COUNT(*) AS numRows FROM table 
WHERE SUBSTRING(username, 1, CHAR_LENGTH(desiredUserName)) = desiredUserName

如果numRows为0,则可以保留用户名。如果是1,你可以在用户名的末尾加上'1‘。如果numRows > 1,它会变得更加复杂。您需要得到当前的最大值号,它附加了该用户名:

代码语言:javascript
复制
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并将其附加到所需的用户名

票数 2
EN

Stack Overflow用户

发布于 2010-12-21 11:51:58

试试这个(你需要根据你的需要修改这个!)

代码语言:javascript
复制
$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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4498886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档