从2个mysql表中选择产品及其相关图像之一的最佳方法

时间:2015-06-10 09:39:48

标签: mysql

我有2个mysql表。我想选择所有产品及其相关图像之一。

Patch表格中,如果Mat (w :: Nat) (h :: Nat)为真,则获取该行(在本例中为'prod1'为4)....如果'prod2'没有默认图像集,然后得到images的第一行(在这种情况下为3)

default

1 个答案:

答案 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的记录始终位于顶部。

我只需将其加入产品表即可获取产品名称,如上面的查询所示。