Comment concaténer des chaînes de caractères à partir d'une sous-requête dans une seule ligne dans mysql?

J'ai trois tables:

table "package"
-----------------------------------------------------
package_id      int(10)        primary key, auto-increment
package_name    varchar(255)
price           decimal(10,2)

table "zones"
------------------------------------------------------
zone_id         varchar(32)    primary key (ex of data: A1, Z2, E3, etc)

table "package_zones"
------------------------------------------------------
package_id     int(10)
zone_id        varchar(32)

Ce que je suis en train de faire est de retourner toutes les informations dans la table des paquets en PLUS d'une liste de zones pour ce package. Je veux la liste des zones triées par ordre alphabétique et séparés par des virgules.

La sortie, je suis à la recherche de quelque chose comme cela...

+------------+---------------+--------+----------------+
| package_id | package_name  | price  | zone_list      |
+------------+---------------+--------+----------------+
| 1          | Red Package   | 50.00  | Z1,Z2,Z3       |
| 2          | Blue Package  | 75.00  | A2,D4,Z1,Z2    |
| 3          | Green Package | 100.00 | B4,D1,D2,X1,Z1 |
+------------+---------------+--------+----------------+

Je sais que je pourrais faire quelque chose en PHP avec la couche de présentation pour obtenir le résultat souhaité. Le problème est que je voudrais être en mesure de trier zone_list ASC ou DESC, ou même les utiliser" OÙ zone_list AIME" et ainsi de suite. Pour ce faire, j'ai besoin de ce fait dans MYSQL.

Je n'ai AUCUNE idée de comment même de commencer à s'attaquer à ce. J'ai essayé d'utiliser une sous-requête, mais il continuait à se plaindre de plusieurs lignes. J'ai essayé de concat la plusieurs lignes dans une seule chaîne de caractères, mais évidemment, MySQL n'aime pas cela.

Merci d'avance.

Mise à JOUR!

Voici la solution pour ceux qui sont intéressés.

SELECT 
    `package`.*,
    GROUP_CONCAT(`zones`.`zone` ORDER BY `zones`.`zone` ASC SEPARATOR ','  )  as `zone_list`
FROM 
    `package`,
    `package_zones`
LEFT JOIN 
    (`zones`,`ao_package_zones`) ON (`zones`.`zone_id` = `package_zones`.`zone_id` AND `package_zones`.`package_id` = `package`.`package_id`)
GROUP BY 
    `ao_package`.`package_id`
  • utilisation de group by avec group_concat sur la zone de champ
InformationsquelleAutor mrbinky3000 | 2010-10-14