我有2个mysql表。我想选择所有产品及其相关图像之一。
在Patch
表格中,如果Mat (w :: Nat) (h :: Nat)
为真,则获取该行(在本例中为'prod1'为4)....如果'prod2'没有默认图像集,然后得到images
的第一行(在这种情况下为3)
default
答案 0 :(得分:2)
尝试以下查询来解决您的问题:
SELECT p.`name`, i.`image`, i.`default`
FROM products p INNER JOIN
(SELECT * FROM (SELECT * FROM images i ORDER BY i.`default` DESC) AS temp GROUP BY product_id) i
ON p.id = i.product_id
这将产生以下结果:
|name | image | default
---------------------------
|prod1 | img4.png | 1
|prod2 | img3.png | 0
这里的想法是使用GROUP BY的副产品,它始终选择从特定id获取的最顶层记录。让我们说你何时分组:
|name | image | default
---------------------------
|blah | img4.png | 1
|blah | img3.png | 0
SELECT * FROM table1 GROUP BY `name`
结果将是:
|name | image | default
---------------------------
|blah | img4.png | 1
回答您问题的真实查询是:
SELECT * FROM (SELECT * FROM images i ORDER BY i.`default` DESC) AS temp GROUP BY product_id
我按default
对图像表进行排序(降序),以使default
值为1的记录始终位于顶部。
我只需将其加入产品表即可获取产品名称,如上面的查询所示。