我想问一下这是否只能由MySQL完成而不是由php代码完成
我有一张表
ID, CATID, Order
我知道我可以通过
设置顺序SET @pos := 0; UPDATE products SET order = @pos :=@pos +1 ORDER BY order;
但是如何重置它(从每个catid的0开始)。
在php中我可以选择每个catid并每次运行不同的sql。
是否只有MySQL的解决方案?
(还提出一个标题。我不知道如何写它:P)
答案 0 :(得分:1)
引入一个新变量@cat。与catid比较并重置@pos on catid change
SET @pos := 0;
SET @cat:= 0;
UPDATE products p join
(
select id,
@pos:=if(@cat<>catid,0,@pos+1) as new_order,
@cat:=catid
from products
ORDER BY order
) p2 on p.id=p2.id
SET order = p2.new_order;