kukix
7.09.2006, 21:32:48
Witam.
Mam taki wielki problem.
Potrzebuje wyświetlić liste newsów i jednoczesnie zliczyć liczbę komentarzy..
moge zrobić pętle i w każdej pętrli zapyutanie o policzenie komentarzy do danego newsa...
Nie chce, tak robić, bo wyrzuci mi mase zapytań...
Jak zrobić to w jednym zapytaniu?
Myslałem, żeby jakoś tak...
SELECT *, COUNT(*) AS liczba_koment FROM tabela_newsy, tabela_komentarze WHERE tabela_newsy.id_news=tabela_komentarze.id_news
WZÓR BAZY:
tabela_newsy:
id_news
tresc
tabela_komentarze:
id_komentarz
id_news
tresc
Prosze o podpowiedź.. coś nie moge tego przeskoczyć... a nie chce robić pętle z tyloma zapytaniami..
nospor
7.09.2006, 21:35:13
SELECT *, COUNT(K.id_komentarz) AS liczba_koment FROM tabela_newsy N LEFT JOIN tabela_komentarze K ON K.id_news=N.id_news GROUP BY N.id_news;
kukix
8.09.2006, 21:14:10
śmiga elegancko .. dzięki...
ale tak sie zastanawiam, czy nie lepiej zapisywać tą liczbe komentarzy w bazie newsów, bezpośrednio w każdym newsie..

np dodając komentarz zwiększało by sie pole liczba komentarzy w wierszu newsa...
jakie rozwiązanie lepiej wybrać...?
nospor
8.09.2006, 21:53:07
Oczywiscie ze tak jest lepiej jak mowisz

Chyba ze to beda male ilosci rekordow, to nie trzeba sie az tak przejmowac. Aczkolwiek przy duzej ilosci i duzym ruchy na stronie, zaoszczedziloby to pare chwil
em_pl
8.09.2006, 22:19:40
nospor: orientujesz się może nad różnicą w wydajności jednego zapytania sql (tego złożonego, podanego przez ciebie) a liczeniem komentarzy każdego posta osobnym zapytaniem ?
nospor
8.09.2006, 22:24:43
dokladnie sie nie orientuje jak duza to bedzie roznica, ale zasada jest prosta:
z reguly im mniej zapytan, tym lepiej

A generowac dla kazdego posta pokolei zapytanie by sprawdzic ile ma komentow, to oto jedno zapytanie za duzo. a jesli to bedzie w petli to juz o wieeeeele za duzo
kukix
9.09.2006, 18:51:12
a jeszcze lepiej jest poprostu trzymac liczbe komentarzy prze każdym newsie?
jak jestesmy przy zapytaniach złożonych, to pomóżcie mi jeszcze zsrobić coś takiego:
Mam komentarz napisanyc przez użytkownika o id 1... jak ułożyć to zapytanie żeby wyświetlając newsy wybierało od razu nazwe urzytkownika o tym id z innej tabeli...?
zrobiłem coś takiego, ale nie wiem, czy nie lepiej będzie coś pokombinowac z "join", tylko, że niebardzo cośmi to wychodzi...
" SELECT tabela_news.*,tabela_uzytk.uzytk_imie FROM tabela_news, tabela_uzytk WHERE tabela_uzytk.uzytk_id=tabela_news.uzytk_id "
przykłądowe tabele:
tabela_news:
id_news
tresc_news
urzytk_id
tabela_uzytk
urzytk_id
uzytk_imie
slowik
9.09.2006, 19:21:00
Tak naprawde to odpowiedz masz juz podaną wyżej przez nospora, to jest normalne złączenie 2 tabel analogiczne do tego z newsami i komentarzami
SELECT tabela_news.*,tabela_uzytk.imie
FROM tabela_news JOIN tabela_uzytk ON tabela_uzytk.urzytk_id = tabela_news.id_news
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.