我有一个存储图像路径,相关产品ID和图像顺序的表。
图像顺序用于自身排序图像(我的意思是每个产品都有多个图像)。澄清下面的结构是我的图像表
img_id(autoincrement) | product_id(u.s int) | img_order(tiny int)
1000 | 1 | 0
1001 | 1 | 1
1002 | 1 | 2
1003 | 2 | 0
1004 | 2 | 1
---
1005 | 3 | 0
1006 | 3 | 0
1007 | 3 | 0
1008 | 4 | 0
1009 | 4 | 0
...
正如您在水平线后看到的,每个img_order
的值都是“0”
如何只使用MySQL查询处理那些行?如果我尝试where img_order = 0
它不起作用,因为它包含img_id = 1000(例如),但对于产品1,它对于产品的其他图像没有零值。
我只需要img_order = 0行,但相关产品的img_order必须大于零
答案 0 :(得分:1)
这是使用外部联接的解决方案......
SELECT DISTINCT x.*
FROM product_images x
LEFT
JOIN product_images y
ON y.product_id = x.product_id
AND y.img_order <> 0
WHERE y.img_id IS NULL;
除了img_id上的PRIMARY KEY之外,我怀疑这个查询将受益于(product_id,img_order)上的索引。
答案 1 :(得分:0)
你走了:
将index添加到product_id列并尝试此查询
SELECT
id
FROM
Table
WHERE
product_id IN (SELECT
product_id
FROM
Table
GROUP BY product_id
HAVING MAX(img_order) = 0)