Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 设置顺序/位置-通过两个变量重置_Mysql_Sql_Position - Fatal编程技术网

Mysql 设置顺序/位置-通过两个变量重置

Mysql 设置顺序/位置-通过两个变量重置,mysql,sql,position,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的解决方案 同时提出一个标题。我不知道怎么写:引入一个新变量@cat。与catid进行比较,并在

我想问一下,这是否只能通过MySQL而不能通过php代码实现

我有一张桌子

ID, CATID, Order
我知道我可以安排订单

SET @pos := 0; UPDATE products SET order = @pos :=@pos +1 ORDER BY order;
但是如何在每个catid上从0开始重置它

在php中,我可以选择每个catid,每次运行不同的sql

是否只有MySQL的解决方案


同时提出一个标题。我不知道怎么写:引入一个新变量@cat。与catid进行比较,并在catid更改时重置@pos

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;

你能提供一些背景说明为什么这是必要的吗?可能有更好的方法来满足您的要求。不应该由cat_id订购也因为cat_id更改时,每次都会重置订单???我不知道您的表结构,所以不能说。如果您需要自定义订购,只需将必要的字段添加到“订购依据”