MySQL订购一个字段

时间:2015-03-21 14:26:18

标签: php mysql

我有一个名为chapters的MySQL表,如下所示:

字段chapter_number用于订购故事的章节。

我面临的问题是如果用户删除章节,那么排序会以某种方式需要更新。

我考虑使用上一行的值加上chapter_number字段填充。

因此,如果我删除了一行,那么仍然会保持行的线性排序。

这是一个很好的方法吗?

如果是这样,我将如何访问PHP中前一行的值?

enter image description here

2 个答案:

答案 0 :(得分:0)

我知道,chapter_number用于排序。

在MySQL中,您可以使用order by和变量更新表。如果您有订购并删除一行,则以下内容将连续重新编号:

update chapters
    set chapter_number = (@o := coalesce(@o, 0) + 1)
    order by chapter_number;

答案 1 :(得分:0)

只要删除行并且您只使用 chapter_number 进行排序而不是显示,那么您就不必重新编号 chapter_number 字段,因为所需的订单仍将保留。只有在插入的情况下,您才会在插入之前查询最高的 chapter_number

一种典型的方法实际上是完全重新编号chapter_number字段:

SET @x = 0;
UPDATE chapters SET chapter_number = (@x:=@x+1) ORDER BY chapter_number;

在PHP中你必须在两个查询中拆分它,但变量将保持有效,因为你正在处理在页面处理过程中持久存在的同一连接。

mysql_query("SET @x = 0");
mysql_query("UPDATE chapters SET chapter_number = (@x:=@x+1) ORDER BY chapter_number");

你可以在这个较老的mysql问题here

中找到这个概念的非常详细的描述