图像顺序的正确查询是什么

时间:2015-02-20 12:56:55

标签: php mysql

我有一个存储图像路径,相关产品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必须大于零

2 个答案:

答案 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)