我正在创建一个论坛应用程序,我有一个存储类别的表。此表有3列:
Category_Id | Category_Name | CategoryOrder
我有一个PHP脚本,它向数据库添加了一个新的类别,其中包括选择类别的显示顺序。因此,例如,如果我在数据库中存储了5个类别,我想添加一个新类别并使其成为
CategoryOrder
列中的第一个类别,这意味着其他类别的CategoryOrder
必须更改。如果表中只有一个类别,我只需将其更新为新值并将
1
值分配给新类别。但如果我有五排,我该怎么办。如何更改所有这些值以将1
添加到其当前值?我不知道我在这里是否有意义。 最佳答案
我做过几次。我现在找不到任何代码,所以我只发布一个算法(可能包含一些伪代码):
插入新值(更简单的值):
更新所有大于或与新插入的类别相同的类别:CategoryOrder
插入新类别
更新现有类别:
检查一下,新订单是否比原来的大或小(如果是相同的,则无需执行任何操作…)
如果它更大,则更新所有大于旧订单且小于新订单的类别,然后减去1:UPDATE Categories SET CategoryOrder = CategoryOrder + 1 WHERE CategoryOrder >= $newCategory['order'];
-这样你就填补了空白
如果它较小,则与它较大时相似,但将1添加到具有CategoryOrder
和UPDATE Categories SET CategoryOrder = CategoryOrder - 1 WHERE CategoryOrder > $category['old_order'] AND CategoryOrder <= $category['new_order'];
的类别中
应该就是这样。
编辑:对第二个案例的解释(更新):
假设我们有这些条目:
Category_Id | Category_Name | CategoryOrder
1 | name_1 | 1
2 | name_2 | 2
3 | name_3 | 3
4 | name_4 | 4
5 | name_5 | 5
现在我们要用order
CategoryOrder >= new_order
编辑category并将其更改为CategoryOrder < new_order
。我们要做的是将订单2
和4
的类别降低一个:Category_Id | Category_Name | CategoryOrder
1 | name_1 | 1
2 | name_2 | 2
3 | name_3 | 2
4 | name_4 | 3
5 | name_5 | 5
最后更新所需的类别,其顺序为:
Category_Id | Category_Name | CategoryOrder
1 | name_1 | 1
3 | name_3 | 2
4 | name_4 | 3
2 | name_2 | 4
5 | name_5 | 5
现在清楚了吗?
现在,如果我们想用order
3
更改类别,使其成为第一个类别,该怎么办?更新具有order>=4
和4
5:Category_Id | Category_Name | CategoryOrder
1 | name_1 | 2
3 | name_3 | 3
4 | name_4 | 4
2 | name_2 | 5
5 | name_5 | 5
最后更新所需的类别:
Category_Id | Category_Name | CategoryOrder
5 | name_5 | 1
1 | name_1 | 2
3 | name_3 | 3
4 | name_4 | 4
2 | name_2 | 5
(注意按顺序和id排序的类别)
关于php - 如何在表中添加新条目并更改其他条目的排序顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16195867/