Jak połączyć łańcuchy z podquery w pojedynczy wiersz w mysql?
Mam trzy tabele:
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)
Próbuję zwrócić wszystkie informacje z tabeli pakietów oraz listę stref dla tego pakietu. Chcę listę stref posortowanych Alfabetycznie i rozdzielonych przecinkami.
Więc wyjście, którego szukam jest coś takiego...
+------------+---------------+--------+----------------+
| 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 |
+------------+---------------+--------+----------------+
Wiem, że mógłbym zrobić coś w PHP z warstwą prezentacji, aby uzyskać pożądany efekt. Problem polega na tym, że chciałbym móc sortować ZONE_LIST ASC lub DESC lub nawet użyć" WHERE ZONE_LIST Jak" i tak dalej. Aby to zrobić, muszę to zrobić w MYSQL.
Nie mam pojęcia, jak się z tym uporać. Próbowałem użyć zapytania podrzędnego, ale ciągle narzekał na wiele wierszy. Próbowałem połączyć wiele wierszy w jeden ciąg znaków, ale widocznie MySQL tego nie lubi. Z góry dzięki.Aktualizacja!
Oto rozwiązanie dla tych, którzy są zainteresowani.
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`
1 answers
Przez użycie funkcji GROUP_CONCAT () i grupy przez wywołanie. oto przykładowe zapytanie
SELECT
p.package_id,
p.package_name,
p.price,
GROUP_CONCAT(pz.zone_id SEPARATOR ',') as zone_list
FROM
package p
LEFT JOIN package_zone pz ON p.package_id = pz.package_id
GROUP BY
p.package_id
Nadal powinieneś być w stanie zamówić przez zone_id s (lub zone_list) i zamiast używać LIKE
, możesz użyć WHERE zp.zone_id = 'Z1'
lub czegoś podobnego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-21 07:13:53