我使用auto-increment为我的数据库中的每个新条目分配一个id。另外,我有一个php-script,它根据当前的页码从这个数据库中选择10个条目。例如,如果当前页面是2,则脚本应选择id=20和id=29之间的每个条目。
现在,如果我删除一个条目,id就会丢失。因此,当id28被删除时,该脚本将只显示9个条目。
有没有办法在删除e记录后重新分配auto-increment值?
发布于 2012-07-08 19:51:13
这通常被认为是可取的:如果删除了条目编号28,则再也不会有条目28。如果有人试图引用它,他们显然是在尝试引用被删除的那个,你可以报告一个错误。
如果您返回并将28重新分配给某个新条目,现在您不知道此人指的是旧的 28还是的新记录。
让我们退后一步,重新审视你想要做的事情。您的目标不是显示20和30之间的十个条目。您的目标是显示符合条件的10个条目。为此,您可以使用内置的LIMIT和OFFSET术语:
SELECT ...
FROM ...
WHERE ...
OFFSET 29
LIMIT 10OFFSET告诉MySQL从哪里开始计数,LIMIT告诉它要计数多少。MySQL将把整个结果集放在一起,然后从第30个条目开始给你10个条目。这是你的第四页结果。现在他们碰巧拥有什么It已经不重要了。
发布于 2012-07-08 19:50:43
您应该更改为页面选择条目的方式。
通过使用限制..OFFSET子句,您将能够选择10个条目,从第N个条目开始:
SELECT *
FROM table
ORDER BY id
LIMIT 10
OFFSET 19LIMIT 10表示只返回10行,rowsOFFSET 19表示在第19行之后返回行
这样,即使某些id已被删除并且id不是连续的,也无关紧要。
只需更改偏移量:
发布于 2012-07-08 19:51:42
您的问题建议使用如下查询
SELECT columns FROM table WHERE id BETWEEN 20 AND 29;或者不那么优雅
SELECT columns FROM table WHERE id >= 20 AND id <= 29;如果是这样的话,我建议您在LIMIT clause上阅读一下,并按照下面的思路做一些事情
SELECT columns FROM table ORDER BY id LIMIT 20, 10;https://stackoverflow.com/questions/11382877
复制相似问题