Autor Zpráva
anonymní_
Profil *
Dobrý den,

s kolegama v práci si už delší dobu lámeme hlavu s následujícím problémem.
Máme v MySQL databázi tyto tabulky (popisuji jen nejdůležitější sloupce):

Articles: id, name
Tags: id, name
Tags_connections: id, article_id, tag_id

Každý článek obsahuje tedy množinu štítků (propojeno tabukou tags_connections).

Potřebuji ale vybrat všechny články, které mají určité štítky. Vstupní parametry jsou tedy idčka štítků. Problém je, že chci vybrat články, které mají VŠECHNY zadané idčka. Zatím se mi podařilo vybrat články, které obsahuji alespoń jeden štítek ze vstupní množiny štítků. Já potřebuju ale, aby měly všechny zadané štítky.

Věděl by někdo, jak položit takový SQL dotaz?

Lze to řešit i na úrovni PHP, ale položit SQL dotaz mi příjde elegantnější.

Děkuji
Alphard
Profil
Typicky se to řeší seskupením podle article_id a použitím where id in () a having count(*) = X, kde X je počet tagů (to se nejsnáze spočítá v PHP).

Doplňuji, zjistil jsem, že to je i ve FAQ Některé časteji řešené dotazy pro MySQL - FAQ » Nalezení položek mající všechny hledané vlastnosti.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: