Autor Zpráva
Manny
Profil
Následující dotaz mi vypisuje články podle kategorií. Bohužel tento dotaz vypisuje článek duplicitně pokud je zařazen ve více kategoriích.
SELECT ".PREFIX."obsah.id, ".PREFIX."obsah.title, ".PREFIX."articles.perex, ".PREFIX."articles.date, ".PREFIX."articles_on_category.id_category
            FROM ".PREFIX."obsah
            LEFT JOIN ".PREFIX."articles ON ".PREFIX."articles.id = ".PREFIX."obsah.id
            LEFT JOIN ".PREFIX."articles_on_category ON ".PREFIX."articles_on_category.id_article = ".PREFIX."articles.id
            WHERE ".PREFIX."obsah.type = 6 
            ORDER BY ".PREFIX."articles.id DESC    
Potřeboval bych DISTINCT výpis a patrně subselect na sadu kategorií
tiso
Profil
S použitím aliasov by to mohlo vyzerať takto:
SELECT o.id, o.title, a.perex, a.date, GROUP_CONCAT(aoc.id_category)
FROM ".PREFIX."obsah p
LEFT JOIN ".PREFIX."articles a ON a.id = o.id
LEFT JOIN ".PREFIX."articles_on_category aoc ON aoc.id_article = a.id
WHERE o.type = 6 
GROUP BY a.id
ORDER BY a.id DESC
Manny
Profil
tiso:
Těm tvým aliasům moc nerozumím
tiso
Profil
Manny: a skúšal si ten selekt, či robí to čo má?
Manny
Profil
tiso:
Právě že mi db hlásí, že je neznámý sloupec.
tiso
Profil
a.`date`
Manny
Profil
Znovu jsem se na to podíval a chyba byla v překlepu aliasu pro obsah - o
Teď už to vypisuje správně.

Ještě bych ale potřeboval získat sadu id kategorií pro každý řádek (článek). Něco jako SELECT id_category FROM aoc WHERE id_article = o.id
Šel by použít SUBSELECT?
Kajman
Profil
Manny:
Tu sadu by měl vrátit poslední sloupec. Také mu můžete dát alias, ať se s tím lépe pracuje.

Také se můžete podívat na různé možnosti dolování závislých dat a jejich svižnost.
http://php.vrana.cz/srovnani-dotazu-do-zavislych-tabulek.php
Manny
Profil
Kajman:
Super už to funguje.

Jen ještě poslední doplnění. Proč mi nefunguje podmínka s WHERE aoc.id_category = IN (2,3), kde potřebuji vybrat jen ty záznamy, kde id_category je např. 2 a 3.
juriad
Profil
WHERE aoc.id_category IN (2,3)
Žádné rovná se.
tiso
Profil
Manny sorry, ten preklep som si nevšimol

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:

0