【问题标题】:Order concatenated left join results顺序连接的左连接结果
【发布时间】:2017-12-08 03:08:26
【问题描述】:

我有以下表格:

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

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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-04
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 2012-12-06
      • 2011-02-23
      • 1970-01-01
      相关资源
      最近更新 更多