Autor | Zpráva | ||
---|---|---|---|
Neas Profil |
#1 · Zasláno: 9. 11. 2010, 20:51:26 · Upravil/a: Neas
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 |
#2 · Zasláno: 9. 11. 2010, 20:52:24
Neas:
„tak na ty komentáře musim už udělat vlastní sql dotaz?“ lze to jedním dotazem, koukni se na join .
|
||
Neas Profil |
#3 · Zasláno: 9. 11. 2010, 21:07:41
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 |
#4 · Zasláno: 9. 11. 2010, 21:35:47
Neas:
viz FAQ |
||
xmark Profil |
#5 · Zasláno: 9. 11. 2010, 21:37:10
Neas:
A co ti vadí na jednom dotazu pro článek a druhém dotazu pro komentáře? |
||
Neas Profil |
#6 · Zasláno: 9. 11. 2010, 22:53:26
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 |
#7 · Zasláno: 9. 11. 2010, 23:05:50
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 |
#8 · Zasláno: 9. 11. 2010, 23:07:24
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 |
#9 · Zasláno: 10. 11. 2010, 00:04:44 · Upravil/a: Neas
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 |
#10 · Zasláno: 10. 11. 2010, 00:48:01
… GROUP BY web_news.id ORDER BY … |
||
Neas Profil |
#11 · Zasláno: 10. 11. 2010, 12:09:04 · Upravil/a: Neas
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 |
#12 · Zasláno: 10. 11. 2010, 13:04:15
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 |
#13 · Zasláno: 10. 11. 2010, 13:21:20 · Upravil/a: Neas
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 |
||
Neas Profil |
#14 · Zasláno: 10. 11. 2010, 19:28:32 · Upravil/a: Neas
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 |
||
Časová prodleva: 13 let
|
0