如何对MySQL表中的记录/行重新排序

如何对MySQL表中的记录/行重新排序,mysql,sql,Mysql,Sql,我有一个表,它有三列:ID、Name和ParentID。让我们考虑一下这个结构: ID | Name | ParentID 1 Root NULL 2 Parent #1 1 3 Parent #1 1 4 Parent #1 1 5 Parent #1 1 6 Child #1 2 7 Child #1 2 8 Child #1 3 9 Child #1

我有一个表,它有三列:
ID
Name
ParentID
。让我们考虑一下这个结构:

ID |   Name   | ParentID
 1     Root       NULL
 2   Parent #1     1
 3   Parent #1     1
 4   Parent #1     1
 5   Parent #1     1
 6   Child  #1     2
 7   Child  #1     2
 8   Child  #1     3
 9   Child  #1     4
 10  Child  #1     5
 11  Child  #1     5
在用户对行进行重新排序之后,客户端的JavaScript将根据行的ID发送一个具有新的行顺序的数组。例如,它可以是
[4、10、2、3、11、1]

我应该使用什么查询来更改MySQL表中的行顺序?我想得到这样的东西:

ID |   Name   | ParentID
 1     Root       NULL
 9   Child  #1     4
 5   Parent #1     1
 4   Parent #1     1
 3   Parent #1     1
 6   Child  #1     2
 7   Child  #1     2
 8   Child  #1     3
 2   Parent #1     1
 10  Child  #1     5
 11  Child  #1     5

我认为您应该创建新的数据库列(
weight
例如,INTEGER类型),它将指定您的行顺序。它应该是最理想的解决方案。

在我看来,如果没有额外的列
顺序

为此,您必须创建一个新列
order

然后在传递数组时更新表

foreach($passed_array as $order => $val){
 $q = "Update table SET  `order` = $order WHERE ID = $val";
 // run query here
}
编辑

在前端显示数据时,选择查询如下

"SELECT * FROM table `Order` BY `order` ASC"

将额外的列命名为priority,并随时更新优先级列,按优先级列检索数据顺序。我不理解第二个列表的顺序。你能再解释一下吗?为什么ID=2的几乎在底部?@Priyank57,也许你应该把这个作为答案发布,否则我可能会这么做instead@Peanut,我还有一个问题。如果我像在第二个列表中那样保存顺序,用户将按顺序看到元素,如:1、9、5、2等。或者这两个列表之间没有区别,数据将始终从第一个ID显示到最后一个ID?谢谢。@NikosM,请将此作为答案发布。你真的会帮我。请告诉我一件事:如果我像在第二个列表中那样保存顺序,用户将按顺序看到元素,如:1、9、5、2等。或者这两个列表之间没有区别,数据将始终从第一个ID显示到最后一个ID?谢谢。@TurakFladyslav请参阅编辑。。。。无论何时在任何地方显示数据,都要在查询库中大量添加
order by order\u列
。我明白了。@TurakVladyslav会接受我的回答,如果它真的对你有帮助的话