Wie verkette ich Zeichenfolgen aus einer Unterabfrage in einer einzelnen Zeile in MySQL?

Ich habe drei Tabellen:

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)

Ich versuche, alle Informationen in der Pakettabelle zuzüglich einer Liste der Zonen für dieses Paket zurückzugeben. Ich möchte, dass die Liste der Zonen alphabetisch sortiert und durch Kommas getrennt wird.

So ist die Ausgabe, die ich suche, ungefähr so ...

+------------+---------------+--------+----------------+
| 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 |
+------------+---------------+--------+----------------+

Ich weiß, dass ich mit der Präsentationsebene etwas in PHP tun kann, um das gewünschte Ergebnis zu erzielen. Das Problem ist, ich möchte in der Lage sein, zone_list ASC oder DESC zu sortieren oder sogar "WHERE zone_list LIKE" zu verwenden und so weiter. Dazu muss dies in MYSQL erfolgen.

Ich habe KEINE Ahnung, wie ich damit anfangen soll. Ich habe versucht, eine Unterabfrage zu verwenden, aber sie hat sich immer wieder über mehrere Zeilen beschwert. Ich habe versucht, die mehreren Zeilen zu einem einzigen String zusammenzufassen, aber MySQL gefällt das offensichtlich nicht.

Danke im Voraus

AKTUALISIEREN

Hier ist die Lösung für diejenigen, die interessiert sind.

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`

Antworten auf die Frage(2)

Ihre Antwort auf die Frage