我正在创建一个论坛应用程序,我有一个存储类别的表。该表有3列:
Category_Id | Category_Name | CategoryOrder
我有一个PHP脚本,它为数据库添加了一个新类别,它包括选择类别显示的顺序。因此,例如,如果我在数据库中存储了5个类别,并且我想添加一个新类别并使其成为CategoryOrder
列中的第一个类别,则意味着其他类别的CategoryOrder
将不得不改变。
如果表中只有一个类别,我只需将其更新为新值,并将1
值分配给新类别。但如果我有五行,该怎么办?如何更改所有这些内容以将1
添加到其当前值?我不知道我在这里是否有意义。
答案 0 :(得分:1)
我这样做了几次。我现在找不到任何代码所以我只发布一个算法(可能还有一些伪代码):
CategoryOrder
大于或等于新插入的类别的所有类别:
UPDATE Categories SET CategoryOrder = CategoryOrder + 1 WHERE CategoryOrder >= $newCategory['order'];
CategoryOrder
大于旧订单且小于新订单并减去1的所有类别:
UPDATE Categories SET CategoryOrder = CategoryOrder - 1 WHERE CategoryOrder > $category['old_order'] AND CategoryOrder <= $category['new_order'];
- 由此填补空白CategoryOrder >= new_order
和CategoryOrder < 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
现在我们要修改订单2
的类别,并将其更改为4
。我们要做的是让订单3
和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
最后更新所需类别,并将其订单更改为4
:
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
现在更清楚了吗?
现在,如果我们想要将订单5
更改为第一个类别,该怎么办?更新包含&gt; = 1
和5
的所有类别&lt;并将订单设置为+1
:
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排序的类别)
答案 1 :(得分:0)
尝试首先增加CategoryOrder
update categorytable set CategoryOrder = CategoryOrder + 1
然后使用CategoryOrder = 1