如何将product表的backimage作为新行添加到SQL查询结果?
解决方案
可以实现,你需要用UNION ALL将原筛选结果和产品的backimage行合并在一起,具体SQL语句如下:
$notlinkImages = $this->db->query(" -- 第一部分:筛选符合条件的额外图片 SELECT i.product_id, i.image, i.product_option_value FROM " . DB_PREFIX . "product_option_image AS i LEFT JOIN " . DB_PREFIX . "product AS z ON z.product_id = i.product_id LEFT JOIN " . DB_PREFIX . "product_option_value v ON i.product_option_value = v.product_option_value WHERE i.product_id = '" . (int)$row['product_id'] . "' AND (v.link IS NULL OR v.link = 0) AND z.image != i.image UNION ALL -- 第二部分:添加当前产品的backimage作为单独行 SELECT z.product_id, z.backimage AS image, NULL AS product_option_value FROM " . DB_PREFIX . "product AS z WHERE z.product_id = '" . (int)$row['product_id'] . "' ")->rows;
说明:
- 第一部分查询保留了你原本的筛选逻辑:取出非链接(
v.link为0或null)且非主图(与product.image不同)的额外图片。 - 第二部分查询单独取出当前产品的
backimage,并将product_option_value设为NULL,匹配你期望的输出格式。 UNION ALL会将两个查询的结果合并成一个结果集,不会自动去重(这里也不需要去重),最终就能得到每个产品的符合条件的额外图片,加上一行单独的backimage记录。
执行后得到的结果将和你期望的输出一致:
product_id image product_option_value 1 1-additional-image-1.jpg 234 1 1-additional-image-2.jpg 234 1 backimage-1.jpg 2 2-additional-image-2.jpg 265 2 backimage-2.jpg
内容的提问来源于stack exchange,提问作者Kankan2000
相关产品推荐
相关产品推荐

