我有一个名为chapters的MySQL表,如下所示:
字段chapter_number
用于订购故事的章节。
我面临的问题是如果用户删除章节,那么排序会以某种方式需要更新。
我考虑使用上一行的值加上chapter_number
字段填充。
因此,如果我删除了一行,那么仍然会保持行的线性排序。
这是一个很好的方法吗?
如果是这样,我将如何访问PHP中前一行的值?
答案 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
中找到这个概念的非常详细的描述