如何对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会接受我的回答,如果它真的对你有帮助的话