根据位置和其他数据选择

时间:2016-06-13 22:30:18

标签: mysql sql

我有三个包含产品图像数据的表格。这正是我必须使用的数据。请注意,此产品ID 10的缩略图图像位于thumbnail表中,并且仅通过其文件名进一步标识。

  1. images:有图像文件名。

    id | product_id |    file
    -----------------------------
    1  |     10     | image1.jpg
    2  |     10     | image2.jpg
    3  |     10     | image3.jpg
    
  2. positions:包含图片的位置(idimages相同)。

    id | position
    --------------
    1  |    1
    2  |    2
    3  |    3
    
  3. thumbnail:有缩略图(每个产品一个)。

    product_id |   file
    -----------------------
        10     | image3.jpg
    
  4. 我希望撰写最合适的查询,以file position的顺序获取ASC,但始终使用thumbnail图片首先不管它的位置值。所以,我希望得到......

    image3.jpg
    image1.jpg
    image2.jpg
    

    我试图将其写入单个查询(如果可能)。我可以运行两个查询并执行UNION并得到我需要的内容。还有更好的主意吗?

2 个答案:

答案 0 :(得分:1)

如果我正确地解释位置的使用,我会想象这样的事情应该有用。

SELECT i.file
FROM images AS i 
INNER JOIN positions AS p ON i.id = p.id
LEFT JOIN thumbnail AS t ON i.product_id = t.product_id AND i.file = t.file
WHERE i.product_id = ?
ORDER BY (t.product_id IS NULL), p.position
;

(t.product_id IS NULL)基本上是“不是缩略图”检查;由于之前的错误订单,“而不是缩略图”的图像将是第一个。

答案 1 :(得分:0)

Union在这里是你的朋友,只要位置始终在> 0并将缩略图图像设置为位置0

SELECT [file]
FROM 
(
SELECT [file], 0 As position FROM thumbnail
UNION SELECT [file], position FROM images i 
    INNER JOIN positions p 
        ON i.id = p.id
    WHERE i.[file] NOT IN (SELECT [file] FROM thumbnail)
) DATA
ORDER BY DATA.position