我有一个这样的表:
id | parent_id | order
1 | 0 | 1
2 | 1 | 1
3 | 1 | 2
4 | 1 | 3
5 | 0 | 2
6 | 0 | 3
7 | 5 | 1
8 | 5 | 2
通过parent_id在同一个表中获取无限的类别和子类别。我有一个表单与复选框删除一个或多个,我想删除一个或多个行后重新排序组由parent_id。
我写了这样的代码:
mysql_query("SET @rownumber = 0;");
$sql_previous_order = "UPDATE `cms` SET `order` = (@rownumber:=@rownumber+1) ORDER by parent_id, `order` ASC";
您可以引入一个额外的变量- p_id。与parent_id比较,当parent_id改变时,将rownumber重置为0。像这样
SET @rownumber = 0;
SET @p_id = 0;
select id,
CASE @p_id
WHEN parent_id THEN @rownumber:=@rownumber+1
ELSE @rownumber:=0 END as new_order,
@p_id:=parent_id as p_id
from cms
ORDER by parent_id ASC
;