我需要为每个用户生成一个唯一的扩展名(这与 ID 分开,但工作原理基本相同),该数字应该为 100 或更大,并且可以被覆盖/自定义设置。现在我正在获取下一个 id,如果它小于 100,则添加 100。
因此,如果下一个 id 是 5,则数字将是 105,但如果下一个 id 是 105,则数字将只是 105。问题是,因为如果用户之前选择 105,我将让用户选择自己的分机号我想让它自动跳转到下一个数字,在本例中为 106。现在,如果有 105、106 和 108,我想跳转到 107,然后跳转到 109。这是我用来生成数字的代码。我认为问题出在我的 while 循环上。我不知道如何让它继续检查唯一的数字。
这是代码,我确信我的事情过于复杂了。
$result = mysql_query("SELECT MAX(id)
FROM USERS");
$row = mysql_fetch_row($result);
$sql_extention = intval($row[0]);
//make sure it's at least 100
$extension = ($sql_extension < 100) ? $sql_extension+100 : $sql_extension;
//check to see if the extention is in use
$qry = "SELECT `extention`
FROM users
WHERE extention = '$extention'";
$result2 = mysql_query($qry);
//if the extention is in use then find the next available one (this isn't currently working)
if($result2) {
//get all results greater or equal to our extention
$qry3 = "SELECT `id`,`extention`
FROM admin_users
WHERE extention >= '$extention'";
$result3 = mysql_query($qry3);
//this loop needs to be rewritten somehow to get the next number by checking if the next number exist if not return that as the extention
$new_extention = $extention+1;
while($extention_data = mysql_fetch_array($result3)) {
if($new_extention != $extention_data['extention']+1) {
$extention = $new_extention;
}
$new_extention++;
}
最佳答案
我想出了这个,还没有彻底测试它,但我认为它应该正确返回下一个可用值
SELECT (a.extention + 1) as avail
FROM admin_users a LEFT JOIN admin_users b on ( (a.extention + 1) = b.extention )
WHERE a.extention >= 105 and b.extention is null
ORDER BY avail ASC
LIMIT 1
因此,如果这按预期工作,您根本不需要最后几行代码。
编辑: 修改了查询,因为我意识到我从错误的一侧接近它。
关于php - 生成从 mysql ID 获取下一个唯一编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5943265/