我如何添加一个新的条目到表中,并更改其他条目的排序顺序
问题描述:
我正在创建一个论坛应用程序,并且我有一个存储类别的表。此表有3列:我如何添加一个新的条目到表中,并更改其他条目的排序顺序
Category_Id | Category_Name | CategoryOrder
我有一个PHP脚本,将一个新的类别的DATABSE,它包括选择其中的类别将显示的顺序。因此,例如,如果我有5个类别存储在数据库中,并且我想添加一个新类别并将其设置为CategoryOrder
列中的第一类别,这意味着其他类别的CategoryOrder
必须更改。
如果我只有表中的一个类别,我只是将它更新为新值,并将1
值分配给新类别。但如果我有五排,我该怎么办?如何更改所有人以将1
添加到当前值?我不知道我在这里是否有意义。
答
尝试递增CategoryOrder第一
update categorytable set CategoryOrder = CategoryOrder + 1
然后插入与CategoryOrder = 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'];
- 这个你填补了国内空白 - 如果是较小的,做到这一点类似于当它是大,但加1到那些有
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
成为第一个类别?更新所有具有顺序> = 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
(注意类别被他们的顺序排序和编号)
使用'DML'语句... – Kermit 2013-04-24 15:28:43
你的意思是像使用UPDATE语句和东西?我的问题实际上不是关于要使用的语句,而是有关如何更改所有行的CategoryOrder列的数字值,当输入一个已经存在Order的新类别时 – Afam 2013-04-24 15:31:52