2017-07-04 20 views
0

に参加し、私は次の表を持っている:あなたが推測したよう注文は結果

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テーブルは、多くの関係に多くのとして機能します。

私は、文字列に連結されたすべての人物とそのお気に入りの果物を一覧表示するためのクエリを実行しています。私の問題は、私は自分の好きな果物は次のように果物の名前順に表示することができないということです。

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 

がどのように結果を参加連結左を並べ替えることができます。

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

私の現在のMySQLのクエリのように見えますか?

答えて

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 
関連する問題