将用户名插入我的数据库时,例如:
我需要检查是否已存在John_Smith。如果是这样,请将其增加1以成为John_Smith_1
因此,如果以下用户名已存在:
我需要插入下一个John_Smith以增加到John_Smith_11。
到目前为止,我已经搜索并提出了这个问题:
$preferredname= "John_Smith"
//check for duplicate user names
$duplicate= check_for_duplicate_username($preferredname);
//if duplicate, increment the preferredname
if ($duplicate)
{
$parts = explode("_",$preferredname);
if (isset($parts[1]))
$preferredname = $parts[0]."_".$parts[1]."_".($parts[2]+1);
else $preferredname = $parts[0]."_".$parts[1]."_1";
}
我相信这只适用于第一个匹配的用户名。我的问题是检查数据库中具有最高编号的名称的版本..这是我的sql:
function check_for_duplicate_username($name)
{
// check if username already exists
$sql = "SELECT * FROM users WHERE user_username=$name";
//then return duplicates
答案 0 :(得分:1)
您可以使用此查询:
$sql = 'SELECT * FROM users WHERE user_username LIKE ' . $name . '_%';
上面将查询user_username具有类似于John_Smith_ *的值的行(其中*是包含数字的任何有效字符,您必须稍后检查)
您可以使用此php语句获取用户的后缀编号:
preg_match( '/([0-9]+)$/', 'John_smith_10', $matches );
$user_number = $matches[0];
答案 1 :(得分:0)
虽然这可能不是宏观方案中的最佳解决方案,但这里有一个答案可以解决您特别想要做的事情。以下查询返回带有$ name或$ name_123 SELECT COUNT(*) FROM users WHERE user_username REGEXP '$name[_0-9]*$';
的用户数。因此,如果值为0
,您可以单独使用$name
,否则您可以使用{{1} } +查询返回的数字。
但正如许多人所提到的那样,自动分配用户名并不是最好的主意(非常适合网络1.0:P)。我推荐电子邮件地址。另一种选择是使用社交应用程序使用的任何用户标识以及标识社交应用程序的另一个字段(如果您有多个),然后使用自动增加的id字段作为唯一主键...
答案 2 :(得分:0)
我遇到了类似的问题,我今天试图解决这个问题。在我的情况下,我需要根据用户的第一个姓/名来存储/创建一个唯一的目录名:
$username = "bjones";
$usersql = "SELECT * FROM users WHERE username LIKE '$username%'";
$usercnt = mysqli_num_rows(mysqli_query($con,$usersql));
// If bjones, bjones1, bjones2, etc already exists
if ($usercnt >= 1) {
$num = ++$usercnt; // Increment $usercnt by 1
$username = $username . $num; // Add number to username
}
假设bjones,bjones1,bjones2已经存在,我最终会得到bjones3。