我有一个名为Products
的表格,其中包含:
ProductID
Name
一张名为Product_Images
的表格,其中包含:
ImageID
ProductID
Filename
Image_Type
Image_Order
Image_Type
可以是两个选项之一(A或B),并且该顺序允许以特定顺序显示每种类型的多个图像。
我使用的查询是:
SELECT ProductID,
Name,
IFNULL((SELECT Filename
FROM Product_Images
WHERE ProductID = Products.ProductID
ORDER BY Image_Type DESC,
Image_Order
LIMIT 1),
'no_image.jpg') AS Image_Name
FROM Products
WHERE ProductID in (966, 967, 968)
注意:ProdictID列表由搜索结果指定。
这是正常工作,直到我在Product_Images
表中为Alt / Title文本添加了一个字段。
所以,我尝试了以下
SELECT ProductID,
Name,
pi1.Filename,
pi1.alttag
FROM Products
LEFT JOIN (SELECT *
FROM Product_Images
WHERE Product_Images.ProductID = Products.ProductID
ORDER BY Image_Type DESC,
Image_Order
LIMIT 1) AS pi1
ON Products.ProductID = pi1.ProductID
WHERE Products.ProductID in (966, 967, 968)
但它不起作用,我收到错误消息:
Unknown column 'products.productid' in 'where clause'
我已经知道这个错误与JOIN派生表中的Products.ProductID有关,我已经尝试了各种方法来获得结果,但现在我只是围成一圈。
有人可以提出建议吗?
答案 0 :(得分:1)
这不适合你吗?
由于您尝试加入整个图片表并仅返回1张图片而且您只返回1件商品,因此您可以直接使用LEFT JOIN
上的Product_Images
并移动{{1} }和ORDER BY
在它之外,因为它不会仅影响产品图像。
LIMIT
<强> Live DEMO. 强>
您仍然可以像以前一样对其应用null:
SELECT p.ProductID,
p.Name,
p.Price,
i.Filename,
i.alttag
FROM Products p
LEFT JOIN (SELECT ProductID,
Filename,
alttag
FROM Product_Images
ORDER BY Image_Type DESC,
Image_Order) AS i
ON p.ProductID = i.ProductID
WHERE p.ProductID IN (1, 2, 3)
GROUP BY p.ProductID
ORDER BY p.Price