编辑:我找到了一个解决方案,你可以在这个问题的最后找到它:)!
我在网站上使用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”,它只为活动产品创建好的条目但是位置字段等于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
怎么了?
我怎么能这样做?
编辑:这是一个解决方案!
事实上,即使我的第一个查询对位置增量也没有正常工作。
所以最后我找到了一个新的解决方案。如果有人想要使用它,请不要忘记在开发网站上测试它,如果出现问题,我不负责;)!
因此,假设我们要将所有有效产品批量分配到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;
我希望这可以帮助某人:)!
和Cédric