Php 如何向表中添加新条目并更改其他条目的排序顺序
我正在创建一个论坛应用程序,我有一个存储类别的表。此表有3列:Php 如何向表中添加新条目并更改其他条目的排序顺序,php,mysql,sorting,Php,Mysql,Sorting,我正在创建一个论坛应用程序,我有一个存储类别的表。此表有3列: Category_Id | Category_Name | CategoryOrder 我有一个PHP脚本,它向数据库中添加了一个新的类别,其中包括选择类别显示的顺序。因此,例如,如果我在数据库中存储了5个类别,我想添加一个新类别,并使其成为CategoryOrder列中的第一个类别,这意味着其他类别的CategoryOrder必须更改 如果表中只有一个类别,我会将其更新为一个新值,并将1值分配给新类别。但是如果我有五排,我该怎么
Category_Id | Category_Name | CategoryOrder
我有一个PHP脚本,它向数据库中添加了一个新的类别,其中包括选择类别显示的顺序。因此,例如,如果我在数据库中存储了5个类别,我想添加一个新类别,并使其成为CategoryOrder
列中的第一个类别,这意味着其他类别的CategoryOrder
必须更改
如果表中只有一个类别,我会将其更新为一个新值,并将
1
值分配给新类别。但是如果我有五排,我该怎么办呢。如何更改所有值以将1
添加到其当前值?我不知道我在这里是否有意义。首先尝试增加CategoryOrder
update categorytable set CategoryOrder = CategoryOrder + 1
然后插入CategoryOrder=1的新记录尝试先增加CategoryOrder
update categorytable set CategoryOrder = CategoryOrder + 1
然后用CategoryOrder=1插入新记录我这样做过几次。我现在找不到任何代码,所以我只发布一个算法(可能包含一些伪代码):
- 更新所有类别,这些类别比新插入的类别更大或与新插入的类别相同:
更新类别集CategoryOrder=CategoryOrder+1,其中CategoryOrder>=$newCategory['order']代码>
- 插入您的新类别
- 检查新订单是否比以前大或小(如果相同,则无需执行任何操作…)
- 如果较大,则更新比旧订单大且小于新订单的所有类别,并减去1:
和更新类别集CategoryOrder=CategoryOrder-1,其中CategoryOrder>$category['old_order']和CategoryOrder=new_order
CategoryOrder
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
的类别更改为第一个,该怎么办?更新所有具有顺序>=1
和5
<的类别,并将顺序设置为+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排序的)我这样做过几次。我现在找不到任何代码,所以我只发布一个算法(可能包含一些伪代码):
- 更新所有类别,这些类别比新插入的类别更大或与新插入的类别相同:
更新类别集CategoryOrder=CategoryOrder+1,其中CategoryOrder>=$newCategory['order']代码>
- 插入您的新类别
- 检查新订单是否比以前大或小(如果相同,则无需执行任何操作…)
- 如果较大,则更新比旧订单大且小于新订单的所有类别,并减去1:
和更新类别集CategoryOrder=CategoryOrder-1,其中CategoryOrder>$category['old_order']和CategoryOrder=new_order
CategoryOrder
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
的类别更改为第一个,该怎么办?更新所有具有顺序>=1
和5
<的类别,并将顺序设置为+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排序的)使用
DML
语句…你是说像使用UPDATE语句之类的吗?我的问题实际上不是要使用的语句,而是当使用DML
语句输入一个新类别时,如何更改所有行的CategoryOrder列的数值……你是说像使用UPDATE语句之类的吗?我的问题实际上不是要使用的语句,而是当输入一个新类别时,如何更改所有行的CategoryOrder列的数值,该类别的顺序与已存在的类别的顺序类似,让我先试一试。如果而且只有他将新插入的类别的顺序设置为1
,这就足够了。如果他想插入一个新的类别,其顺序设置为3
,同时还有5个其他类别,那么您的查询将中断顺序…我没有提到其他部分。我不会只是插入一个类别来取代顶级的类别。我也希望它比目前订单号3或4的要早。@Afam然后检查我的答案,它解决了所有的问题。。。插入和更新…这看起来更像,让我先试试。如果并且只有他将新插入的类别的顺序设置为1
,这就足够了。如果他想插入一个新的ca