在PrestaShop在线商店中,我发现产品有一些图像,但没有标记为封面图像,因此这些产品在前台列出时没有图像。
我不知道造成这种情况的原因,但我想解决它。
如何为所有那些有一些注册图像但没有标记为封面图像的产品设置封面图像?
注意。- 此解决方案对于禁用多商店选项的 PrestaShop 有效。多商店的解决方案需要详细说明一下。
我们要做的第一件事是识别处于这种情况的所有产品(它们有一些图像,但没有一个是封面),我们将把它们图像的最低 ID 保存在临时表中。我们应用这个查询:
CREATE TABLE temp_image_id AS SELECT MIN(id_image) AS id_image FROM ps_image WHERE id_product NOT IN
(SELECT id_product FROM ps_image WHERE cover = 1)
GROUP BY id_product;
下一步是为所有这些图像标记封面:
UPDATE ps_image SET cover = 1 WHERE id_image IN (
SELECT id_image FROM temp_image_id
);
由于我们几乎 100% 确定我们使用的是 PrestaShop 1.5 或更高版本,因此我们更新 image_shop 表中的封面:
UPDATE ps_image_shop `is` JOIN ps_image `i` ON `i`.id_image = `is`.id_image SET `is`.cover = `i`.cover;
最后,我们删除用于了解必须覆盖哪些图像 ID 的临时表:
DROP TABLE temp_image_id;
现在我们可以检查是否不再有任何带有图像但没有封面图像的产品:
SELECT COUNT(DISTINCT id_product) FROM ps_image WHERE id_product NOT IN
(SELECT id_product FROM ps_image WHERE cover = 1);
我们应该得到零。
注意。-我们使用临时表,因为我们无法将所有内容放在一个查询中,是的,我们可以,但是该查询不起作用,它会给出错误,因为它将尝试更新字段(覆盖)是查询中过滤器的一部分。这是做不到的。