php - 生成从 mysql ID 获取下一个唯一编号

标签 php mysql sql

我需要为每个用户生成一个唯一的扩展名(这与 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/

相关文章:

javascript - 如何在固定尺寸的盒子内按高度调整图像,并在上传后保持图像尺寸

php - 在 while ($row = mysql_fetch_array($result)) { PHP 中查找标题的变化

php - 从 Mysql 创建嵌套数组

mysql - 如何创建互连的mysql触发器

sql - sql中OR和UNION的输出区别

mysql - 如何从 Mysql 中存在的表创建 sql 语句

php - 使用 fwrite 保存 .xls 文件

mysql - 如何在组mysql表中选择最大值

php - mysql_fetch_assoc 中的 while 循环不起作用

sql - 检查 PL/pgSQL 中的时间戳