MySQL GROUP_CONCAT

Odesláno v September 16, 2016 | Kategorie MySQL, PHP, Programování | Leave a Comment

Skvělou MySQL funkcí, o které mnoho lidí neví, je GROUP_CONCAT. Ve skutečnosti jsem ji neznal já a přišla mi velmi vhod.

Jednoduchý příklad použití: Máme v tabulce statisíce, možná milióny řádků typu
Id  | ProductID  | Tag

Máme několik tagů u každého ProductId a chceme vypsat všechny Tagy pro vybrané ProductId.

Tohle u jednoho produktu snadno vyřešíme SELECTem. Pokud bychom ale chtěli vypsat v jedné tabulce všechny Produkty s jejich tagy, asi bychom to museli složit pomocí skriptu, možná nějak přes JOINT.

Ale právě k tomu je zde GROUP_CONCAT()

select `ProductId`, 
GROUP_CONCAT(DISTINCT `Tag` SEPARATOR ',') as tags 
from `keywords` 
group by ProductId

Výsledek pak vypadá nějak takto:

ProductID  Tags
1          reality,průmyslové,pronájem,skladování,sklady
2          software,blog,hardware,it,novinky,názory
3          kilimandžáro,afrika
4          hudba

Poznámka, nicméně důležitá. MySQL má nastavenu max. délku výstupního řetězce na 1024 znaků, určutě je vhodná vyšší hodnota.

mysql_query("SET group_concat_max_len = 4096");

Komentáře

Váš komentář: