首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL给字段排序

MySQL给字段排序
EN

Stack Overflow用户
提问于 2015-03-21 14:26:17
回答 2查看 33关注 0票数 0

我有一个名为“章节”的MySQL表,如下所示:

字段chapter_number用于排序一个故事的章节。

我面临的问题是,如果用户删除了一章,那么排序就需要进行更新。

我想用上一行加1的值填充chapter_number字段。

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

这是个好办法吗?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-21 14:29:32

我明白了,chapter_number是用来订购的。

在MySQL中,可以使用order by和变量更新表。如果您有一个排序,并删除一行,那么以下将重新编号的章节连续:

代码语言:javascript
复制
update chapters
    set chapter_number = (@o := coalesce(@o, 0) + 1)
    order by chapter_number;
票数 0
EN

Stack Overflow用户

发布于 2015-03-21 14:54:42

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

一个典型的方法实际上是完全重命名chapter_number字段:

代码语言:javascript
复制
SET @x = 0;
UPDATE chapters SET chapter_number = (@x:=@x+1) ORDER BY chapter_number;

在PHP中,您必须将其拆分为两个查询,但是变量将保持有效,因为您处理的是在页面处理期间持久化的相同连接。

代码语言:javascript
复制
mysql_query("SET @x = 0");
mysql_query("UPDATE chapters SET chapter_number = (@x:=@x+1) ORDER BY chapter_number");

您可以在这个较老的mysql问题here中找到这个概念的非常详细的描述。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29183801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档