订单连接左连接结果

时间:2017-07-04 15:12:44

标签: mysql group-by many-to-many left-join group-concat

我有以下表格:

Table: person
 id  |  name
  1  |  John
  2  |  Ana
  3  |  Thomas

Table: fruit 
 id  |  name
  1  |  orange
  2  |  banana
  3  |  grapefruit
  4  |  lemon
  5  |  apricot

Table: person_fruit
person_id | fruit_id
    1     |     1
    1     |     3
    2     |     1
    2     |     2
    1     |     5

正如您所猜测的那样,person_fruit表可以作为多对多的关系。

我正在进行查询,列出所有人和他们喜欢的水果串联在一起。我的问题是我不能用水果名称来展示他们最喜欢的水果,如:

John   | apricot, grapefruit, orange
Ana    | banana, orange
Thomas | NULL

我当前的MySQL查询如下:

SELECT 
  p.name, 
  GROUP_CONCAT(f.name SEPARATOR ', ') fruit
FROM
  person p
LEFT JOIN person_fruit pf
  ON p.id = pf.person_id
LEFT JOIN `fruit` `f`
  ON f.id = pf.fruit_id
GROUP BY
  p.id

如何对连接的左连接结果进行排序?

1 个答案:

答案 0 :(得分:1)

您可以在GROUP_CONCAT中使用ORDER BY。

p.name也应该在GROUP BY子句中

SELECT 
  p.name, 
  GROUP_CONCAT(f.name  ORDER by f.name ASC SEPARATOR ',') fruit
FROM
  person p
LEFT JOIN person_fruit pf
  ON p.id = pf.person_id
LEFT JOIN `fruit` `f`
  ON f.id = pf.fruit_id
GROUP BY
  p.name