【发布时间】:2014-12-22 23:10:23
【问题描述】:
我有一个如下所示的 SQL 列。
注意 1100 和 2000 中的数字(1101 - 1123 不显示,但它们存在)。我编写了一个脚本来制作它,以便在某个组注册的用户将获得与该组对应的登录名。因此,如果他们在基本组中注册,他们将获得 1100 年代的第一个可用登录名。如果他们在中等组中注册,那么他们将在 2000 年代获得第一个可用的登录名。假设用户 AAL2002 被删除,下一个加入的人应该登录 2002,而不是 2007(以便自动填补空白)。
现在我有一个 PHP 脚本,它试图查看所有内容并为他们提供一个新的、未使用的登录名。问题是它重复了一些登录。有没有其他方法可以用 PHP 和 SQL 做到这一点?
如果您认为可以修复,这是我可怕的、令人困惑的代码:
$husers = Query::runQuery("SELECT * FROM `users` WHERE `group`=? AND `login` NOT BETWEEN 'AAL1000' AND 'AAL1010'", array($post['group']));
$i = 0;
$f = false;
do
{
$baseid = (substr($users[$i]['login'], 3)) + 1;
if($baseid != substr($users[$i+1]['login'], 3))
{
$checkid = Query::runQuery("SELECT * FROM `users` WHERE `login`=?", array("AAL".$baseid));
if($checkid[0]['login'] != "AAL".$baseid)
{
$f = true;
}
}
$i++;
}
【问题讨论】:
-
如果你在 INTEGER 列中有数字会更容易。
-
@Barmar 这是问题的一部分。
-
给出的两个答案都没有帮助我。