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
Vous devez vous connecter pour publier un commentaire.
à l'aide de la GROUP_CONCAT() fonction et un GROUPE EN appel. voici un exemple de requête
vous devriez toujours être en mesure de commander par zone_id s (ou zone_list), et au lieu d'utiliser
LIKE
, vous pouvez utiliserWHERE zp.zone_id = 'Z1'
ou quelque chose de similaire.