J'ai trois tables:Comment concaténer des chaînes d'une sous-requête en une seule ligne dans mysql?
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 le tableau paquet PLUS une liste de zones pour ce paquet. Je veux que la liste des zones soit triée par ordre alphabétique et séparée par des virgules.
donc la sortie que je suis à la recherche est quelque chose comme ça ...
+------------+---------------+--------+----------------+
| 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, je voudrais pouvoir trier zone_list ASC ou DESC ou même utiliser "WHERE zone_list LIKE" et ainsi de suite. Pour ce faire, j'ai besoin de cela fait dans MYSQL.
Je n'ai aucune idée de comment commencer à s'attaquer à cela. J'ai essayé d'utiliser une sous-requête, mais elle ne cessait de se plaindre de plusieurs lignes. J'ai essayé de concaténer les multiples lignes en une seule chaîne, mais évidemment, MySQL n'aime pas ça.
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`
use group by avec group_concat sur le champ de zone –