mySQL update sort - 删除一个或多个后,从包含无限子项的表开始

时间:2015-10-15 06:15:11

标签: php mysql sql

我有一张这样的表:

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在同一个表中占用无限的类别和子节点。 我有一个带有复选框的表单可以删除一个或多个,我想在删除一行或多行 group by parent_id 后重新排序。

我写了这段代码:

mysql_query("SET @rownumber = 0;");
$sql_previous_order = "UPDATE `cms` SET `order` = (@rownumber:=@rownumber+1) ORDER by parent_id, `order` ASC";

但是在更改parent_id之后它不会将rownumber变为零(0)。

1 个答案:

答案 0 :(得分:0)

您可以引入一个额外的变量 - 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
;