Autor Zpráva
Neas
Profil
Ahoj.
Když budu chtít vypsat článek uložený v databázi a pod něj pak všechny komentáře, tak na ty komentáře musim už udělat další sql dotaz? chápu to dobře?
panther
Profil
Neas:
tak na ty komentáře musim už udělat vlastní sql dotaz?
lze to jedním dotazem, koukni se na join.
Neas
Profil
lámu si hlavu nad tím, jak to udělat, aby se mi vybral jen jeden článek, ale všechny komentíře..
Taps
Profil
Neas:
viz FAQ
xmark
Profil
Neas:
A co ti vadí na jednom dotazu pro článek a druhém dotazu pro komentáře?
Neas
Profil
Taps:
zde se řeší pouze počet komentářů u článku, nikoli jejich výpis spolu s článkem
xmark:
rychlost, přehlednost kódu..
tiso
Profil
Neas: 2 dotazy sú v tomto prípade správna voľba. Naopak, pre prípad počtu komentárov k článku (článkom) je správne jeden dotaz.
xmark
Profil
Neas:
Jestli myslíš, že vytáhnout data z databáze jedním dotazem místo dvou bude tak velká úspora času, tak prosím. Ale to o přehlednosti, to pravda nebude.
Neas
Profil
dobrá, tak děkuji oběma. a pokud jde o to počítání komentářů, mám další problém. následující dotaz mi z nějakého důvodu vyhazuje pouze jeden jediný řádek, přitom když vynechám count(), vše probíhá jak má (jen samozřejmě nezjistím počet komentářů, což chci):
SELECT autor.username, autor.user_rank, count(web_komentare.id), web_news.*, posledni.username, posledni.user_rank FROM web_news
LEFT JOIN forum_users autor ON web_news.autor_id=autor.user_id
LEFT JOIN forum_users posledni ON web_news.id_last_post_user=posledni.user_id
LEFT JOIN web_komentare ON web_komentare.zaznam_id=web_news.id
ORDER BY web_news.datum_vlozeni ASC LIMIT 2

dotaz zjišťuje informace o novinkách, jejich autorech, autorovi posledního komentáře a počet komentářů. dřív jsem počítání komentů řešil tak, že jsem do řádku s daným článkem vždy navyšoval kolonku pocet_komentu, ale pak jsem objevil funkci count() a řekl jsem si, že když bude fungovat jak má, bude s tím ve finále méně starostí.
tiso
Profil
…
GROUP BY web_news.id 
ORDER BY …
Neas
Profil
a nebylo by lepší zjišťovat jméno i hodnost autora posledního příspěvku tak, že by se v tomto dotazu nějaká část upravila a jméno+hodnost autora by se zjišťovala přímo z tabulky web_komentare, kde zaznam_id == web_news.id a table_name == 'web_news' ?? mohl bych pak z web_news vymazat řádky "id_last_post_user" a "last_post" (čas). Jen opět nevím, jak takový dotaz skloubit dohromady :(
Nebo bych měl podle vás zůstat u ukládání id posledního přispivatele a času přidání posledního příspěvku přímo do web_news?
tiso
Profil
Neas: uvažuješ správne, tie veci podľa pravidiel návrhu databáz a normálových foriem nemajú vo web_news čo robiť. Ale môžu sa tam dať kvôli výkonnosti pri denormalizácii. Takto by sa tam dal pridať aj stĺpec s počtom komentárov k príslušnej novinke.
Neas
Profil
a jak by měl vypadat ten dotaz, kdyby měl ta data brát z tabulky web_komentare a ne web_news? počítám, že by se nějak "kouzlilo" se třetím řádkem, něco jako:
LEFT JOIN forum_users posledni ON web_komentare.poster_id=posledni.user_id
ale něco takého jsem zkoušel a nefunguje, asi tam ještě něco chybí.
Neas
Profil
tak už jsem na to přišel, ale děkuji všem za pomoc s předešlými problémy :)
SELECT count(komenty.id), autor.username, autor.user_rank, posledni.username, posledni.user_rank, komenty.post_time, komenty.poster_id, clanek.* FROM web_news clanek
LEFT JOIN web_komentare komenty ON komenty.zaznam_id=clanek.id
LEFT JOIN forum_users autor ON clanek.autor_id=autor.user_id
LEFT JOIN forum_users posledni ON komenty.poster_id=posledni.user_id
GROUP BY clanek.id ORDER BY clanek.datum_vlozeni ASC LIMIT 2

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0