Autor Zpráva
xpt26
Profil
Zdravíčko!

Mam potřeboval bych poradit se správným počítáním článků ve stránce. Mám tabulku článku articles. Tabulku kategorií cats. Tabulku která spojuje články a kategorie articles_cats (článek může být ve více kategoriích.) Tabulku stránek pages. Tabulku spojující stránky a kategorie pages_cats ( na stránce může být více kategorií a v každé kategorii z jedné stránky více článků). A můj problém je že se pokoušim spočítat, kolik je na stránce článků. Tedy vyberu si stránku s page_id = 1 z tabulky pages_cats zjistím, že se stránka nachází v kategoriích cat_id = 1, cat_id = 2, cat_id = 3 a v každé z této kategorie vede odkaz na články s article_id = 1, article_id = 2, article_id = 3. Potřeboval bych se tedy dopočítat k tomu, že na stránce jsou 3 články.

Zkoušel jsem něco takovéhleho:
SELECT COUNT(a.article_id) AS count2
FROM articles a
LEFT JOIN articles_cats ac
ON ac.article_id = a.article_id
LEFT JOIN pages_cats pc
ON pc.cat_id = ac.cat_id    
WHERE pc.page_id = 1

Moc prosím.
Keeehi
Profil
Použití tabulky pages je velmi neobvyklé. Většinou nic takového není potřeba. Proč ji musíte používat? Čeho se snažíte dosáhnout?
xpt26
Profil
V tabulce pages mám jméno teé stránky, zda je statická - pokud ano skript zobrazí html soubor - pokud není statická chtěl bych zobrazit články z kategorii ve kterých je stránka. Možná lepši popis: články řadím do kategorií, ale více kategorií řadím do stránky.
Keeehi
Profil
Takže lepší pojmenování místo "stránka" by bylo něco jako soubor kategorií nebo nadtkategorie? Něco jako pro
-IT
  - hardware
  - PHP
  - správa servru
-Vaření
  - polévky
  - rychlovky
  - pečení

Ty jednotlivé položky jsou kategorie a IT a Vaření jsou ve vašem pojmenování stránky. Je to tak?
xpt26
Profil
Ano, přesně tak jsem to myslel.
Kajman
Profil
xpt26:

Zkuste si vyčítat počet jedinečných hodnot v id článku...
COUNT(DISTINCT a.article_id)

A slovo LEFT z joinů můžete dát pryč.
Keeehi
Profil
xpt26:
Ok, pak je vše v pořádku. Mátlo mě to pojmenování, tak jsem si to chtěl ujasnit.

Dotaz pro zjistění počtu článků té stránky (nadkategorie) vypadá takto:
SELECT COUNT(DISTINCT articles.article_id) AS pocet
FROM pages_cats
JOIN articles_cats USING (cat_id)
JOIN articles USING (article_id)
WHERE pages_cats.page_id = 1

Ještě by se místo DISTINCT dalo použít GROUP BY articles.article_id. Nevím ale, jak na tom tyto varianty jsou výkonově.

Pokud může být kategorie jen v jedné stránce, pak by se to dalo zbavit té tabulky pages.
xpt26
Profil
Kajman:
Ano DISTINCT zabral. Děkuji! Nicméně je mé schéma těchto tabulek správné?


Keeehi:
Pokud může být kategorie jen v jedné stránce, pak by se to dalo zbavit té tabulky pages.

Bohužel ne, jedna a ta samá kategorie může být ve více stránkách (nadkategoriích)

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: