Tengo tres tablas:¿Cómo concateno cadenas de una subconsulta en una sola fila en 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)
Lo que estoy tratando de hacer es devolver toda la información en la tabla paquete más una lista de las zonas correspondientes a ese paquete. Quiero que la lista de zonas esté ordenada alfabéticamente y separada por comas.
lo que la salida que estoy buscando es algo como esto ...
+------------+---------------+--------+----------------+
| 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 |
+------------+---------------+--------+----------------+
Sé que podría hacer algo en PHP con la capa de presentación para obtener el resultado deseado. El problema es que me gustaría poder ordenar zone_list ASC o DESC o incluso usar "WHERE zone_list LIKE", y así sucesivamente. Para hacer eso, necesito esto hecho en MYSQL.
No tengo ni idea de cómo empezar a hacer frente a esto. Intenté usar una subconsulta, pero seguía quejándose de varias filas. Traté de combinar las múltiples filas en una sola cadena, pero evidentemente a MySQL no le gusta esto.
Gracias de antemano.
¡ACTUALIZACIÓN!
Aquí está la solución para quienes estén interesados.
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 con group_concat en el campo de zona –