设置顺序/位置 - 通过两个vars重置

时间:2014-04-22 11:55:42

标签: mysql sql position

我想问一下这是否只能由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)

1 个答案:

答案 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;