EDIT : I've found a solution, you can find it at the end of this question :) !

我在网站上使用Prestashop 1.6.1.5 . 我想将具有活动状态的所有产品批量分配到id = 3的类别 . 我还希望此类别中产品的位置从0开始增加 .

现在这就是我所做的:

INSERT IGNORE INTO ps_category_product SELECT 3, id_product, ((SELECT MAX(position) FROM ps_category_product WHERE id_category = 3) + (@inc := @inc + 1)) FROM ps_product INNER JOIN (SELECT @inc := 0) AS i

在ps_category_product表中为每个产品创建一个新条目,与id_category = 3相关联 . 每个条目都有一个递增的位置值 .

但是现在,我只想要活跃的产品...如果我在请求结束时添加“WHERE active = 1”,它只为活动产品创建好条目但是每个条目的position字段等于0 ...

INSERT IGNORE INTO ps_category_product SELECT 3, id_product, ((SELECT MAX(position) FROM ps_category_product WHERE id_category = 3) + (@inc := @inc + 1)) FROM ps_product INNER JOIN (SELECT @inc := 0) AS i WHERE active = 1

怎么了 ?

我怎么能这样做?

EDIT : HERE IS A SOLUTION !

实际上,似乎即使是我的第一个查询也无法正常进行位置增量 .

最后我找到了一个新的解决方案 . 如果有人想要使用它,请不要忘记在开发网站上测试它,如果出现问题我不负责;)!

因此,假设我们要将所有活动产品批量分配到ID = 3的类别 .

  • 在您的数据库中,转到ps_category_product并删除id_category = 3的所有条目

  • 在category = 3中插入所有活动产品

INSERT IGNORE INTO ps_category_product SELECT 3,id_product,0 FROM ps_product WHERE active = 1

  • 将产品的位置从0增加到X.

SELECT @i:= -1;更新 ps_category_product SET position =(选择@i:= @i 1)WHERE id_category = 3;

我希望这可以帮助某人:)!

塞德里克