Portál AbcLinuxu, 14. května 2025 06:12

Dotaz: mysql spojení výsledků poddtazu

2.8.2010 10:41 filbar | skóre: 36 | blog: Denicek_programatora | Ostrava
mysql spojení výsledků poddtazu
Přečteno: 348×
Odpovědět | Admin
V MySQL mám tabulky produkty a kategorie, pričemž jeden produkt může být ve více kategoriích což řeším spojovací tabulkou. Problém ale je, když chci načíst všechny kategorie patřící k jednomu produktu:
SELECT @pid:=p.id, p.title, CONCAT_WS(',',(SELECT c.title FROM category AS c LEFT JOIN product_category AS pc ON c.id=pc.category_id WHERE product_id=@pid)) AS categories
FROM products AS p
Vždycky mi to hlásí že poddotaz vrací více řádků než jeden. Nevíte, kde mám chybu a jak to udělat správně?

Předem děkuji.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

2.8.2010 10:51 Pavel Stehule
Rozbalit Rozbalit vše Re: mysql spojení výsledků poddtazu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Parametrem agregacni funkce nemuze byt subselect - navic pouziti session promennych (pravdepobne pro vytvoreni korelovaneho poddotazu) mi prijde taky dost odvazne. Proste to chce klasicky JOIN a pak naslednou agregaci, nikoliv obracene.
2.8.2010 11:02 filbar | skóre: 36 | blog: Denicek_programatora | Ostrava
Rozbalit Rozbalit vše Re: mysql spojení výsledků poddtazu
Když tam dám LEFT JOIN, tak přece mi to pak vrátí ten řádek s názvem produktu několikrát? ;(

Prozatím jsem používal jenom LEFT JOINy a poddotazy. Jak by to vypadalo v MySQL kódu? Děkuji.
2.8.2010 13:15 jos
Rozbalit Rozbalit vše Re: mysql spojení výsledků poddtazu
SELECT @pid:=p.id, p.title, CONCAT_WS(',', c.title) AS categories
FROM products AS p
LEFT JOIN product_category AS pc ON pc.product_id = p.id
LEFT JOIN category AS c ON c.id = pc.category_id
GROUP BY p.id, p.title

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.