2017-07-04 2 views
0

je tableaux suivants:ordre concaténé joindre à gauche des résultats

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 

Comme vous l'aurez deviné, la table de person_fruit sert de plusieurs à plusieurs.

Je fais une requête pour répertorier toutes les personnes et leurs fruits préférés concaténés dans une chaîne. Mon problème est que je ne peux pas afficher leurs fruits préférés classés par ordre alphabétique de fruits comme:

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

Mon actuelle requête MySQL ressemble:

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 

comment pouvez-vous trier la gauche concaténés rejoindre les résultats?

Répondre

1

Vous pouvez utiliser ORDER BY dans GROUP_CONCAT.

également p.name devrait être en clause 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