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()

  1. SELECT `ProductId`,
  2. GROUP_CONCAT(DISTINCT `Tag` SEPARATOR ',') as tags
  3. FROM `keywords`
  4. 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.

  1. mysql_query("SET group_concat_max_len = 4096");
Hlasujte pro tento článek:
  • Bookmarky.cz
  • Digg
  • del.icio.us
  • Google
  • Linkuj
  • Vybrali.sme
  • E-mail this story to a friend!
  • Facebook
  • LinkedIn

Komentáře

Váš komentář: