【问题标题】:Reorder ids to be sequential将 ID 重新排序为连续的
【发布时间】:2014-02-26 01:57:18
【问题描述】:

由于添加和删除项目,我将 ID 分隔为 2、3、12、22、23、24。 所以我想从 1 开始重新排序它们并按顺序设置每个项目,然后将 auto_increment 设置为它们中的最后一个 + 1。

我读过类似的问题,但没有人说他们为什么想要这个,我需要这个,因为如果 id 达到限制数 (255),我将无法在表中添加更多项目,而且它是荒谬,因为里面只有 30 件物品。

这可能很简单,或者我遗漏了一些东西,请帮助我。

【问题讨论】:

  • 问题:为什么不能超过255的限制?如果将该字段设置为 INT,则最多将获得 2,147,483,647。 BIGINT 会给你更多
  • 哇,答案很快,非常感谢!我知道我错过了什么哈哈
  • 哦,它不起作用,一直说 255 是限制,在 int 和 bigint 中,我只是尝试在 auto_increment 为 256 并且我的表消失时添加一个新项目:/
  • 嗯,这很奇怪。您的代码中可能有一些东西阻止了从 ID 255 开始的任何内容。 - 虽然我不能完美地回答你的问题,但我可以给你一个解决方法(我会作为答案发布)
  • 我刚刚意识到宽度是以字节为单位的?因为我尝试使用 11 而不是 255,我可以在表中添加超过 11 个项目。这张新桌子有15个项目,没有像旧桌子那样无缘无故消失的问题。我认为这已经解决了。感谢支持

标签: php mysql indexing


【解决方案1】:

如 cmets 中所述,这是我针对您的情况的解决方法(请原谅返回数组键 0 的丑陋骇人方式。
这也是假设您正在使用 MySQLi 并且已经连接到数据库

<?php
$query = mysqli_query($con, "SELECT `t1`.`id` + 1 FROM `grpgusers` AS `t1` WHERE NOT EXISTS (SELECT * FROM `grpgusers` AS `t2` WHERE `t2`.`id` = `t1`.`id` + 1) LIMIT 1");
$getID = mysqli_data_seek($query, 0);
$temp = mysql_fetch_array($query);
$id = $temp[0];

然后,在您的插入查询中,添加新的 $id。
例如:
mysqli_query($con, "INSERT INTOitems(name,etc.) VALUES ('{escaped postdata}', 'etc.')");
然后应该改为:
mysqli_query($con, "INSERT INTOitems(id,name,etc.) VALUES (".$id.", '{escaped postdata}', 'etc.')");

【讨论】:

    猜你喜欢
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 2019-04-12
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多