我有三个包含产品图像数据的表格。这正是我必须使用的数据。请注意,此产品ID 10
的缩略图图像位于thumbnail
表中,并且仅通过其文件名进一步标识。
images
:有图像文件名。
id | product_id | file
-----------------------------
1 | 10 | image1.jpg
2 | 10 | image2.jpg
3 | 10 | image3.jpg
positions
:包含图片的位置(id
与images
相同)。
id | position
--------------
1 | 1
2 | 2
3 | 3
thumbnail
:有缩略图(每个产品一个)。
product_id | file
-----------------------
10 | image3.jpg
我希望撰写最合适的查询,以file
position
的顺序获取ASC
,但始终使用thumbnail
图片首先不管它的位置值。所以,我希望得到......
image3.jpg
image1.jpg
image2.jpg
我试图将其写入单个查询(如果可能)。我可以运行两个查询并执行UNION
并得到我需要的内容。还有更好的主意吗?
答案 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