我正在创建一个论坛应用程序,我有一个存储类别的表。此表有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添加到具有CategoryOrderUPDATE 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

现在我们要用orderCategoryOrder >= new_order编辑category并将其更改为CategoryOrder < new_order。我们要做的是将订单24的类别降低一个:
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

现在清楚了吗?
现在,如果我们想用order3更改类别,使其成为第一个类别,该怎么办?更新具有order>=445:
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/

10-10 18:06