我有一张这样的表:
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)。
答案 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
;