Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]/[MySQL] Zliczanie liczby komentarzy
Forum PHP.pl > Forum > Przedszkole
Wieviór
Wyświetlam na stronie głównej newsy, przy każdym mam podaną ilość komentarzy.

W bazie danych są tabele:

Kod
news
id | tytul | tresc

komentarze
id | news_id | tresc


Do tej pory rozwiązywałem to tak, że był wczytywany news i do zliczania komentarzy taka instrukcja:
  1. <?
  2. $sql = "SELECT count(id) FROM komentarze WHERE news_id=$zmienna";
  3. $wykonaj = mysql_query($sql);
  4. $wynik = mysql_fetch_row($wykonaj);
  5. $ilosckomen = $wynik[0];
  6. ?>


No ale to na pewno nie jest najlepszy sposób. Teraz robię małą optymalizację i zastanawiam się jak to rozwiązać. Czy robić jakiś UNION, JOIN? Czy może dodać do tabeli news pole komentarze, i po prostu dodawać tam jedynkę przy każdym kolejnym dodawaniu komentarza? (to mi nieco nie pasuje, bo jeśli będę usuwał?)
phpion
Ja bym to zrobił w ten sposób: najpierw pobieram newsy, które są do wyświetlenia i wczytuję do tablicy. Równocześnie tworzę tablicę zawierającą id wybranych newsów. Następnie robię drugie zapytanie:
  1. SELECT news_id, COUNT(*) FROM komentarze WHERE news_id IN (1, 2, 3) GROUP BY news_id;

gdzie (1, 2, 3) powstaje na podstawie tablicy samych id. Dane z zapytania również pakujemy do tablicy i gra muzyka.
Wyświetlamy!
2 zapytania i po kłopocie.
sticker
dla optymalizacji raczej dodałbym kolumne w newsie z ilością komentarzy i ustawił odpowiednie triggery na bazce przy dodawaniu i kasowaniu komentarzy i mamy 1 zapytanie zamiast 2 smile.gif

(czasami taki redundancje danych są bardzo wskazane, zwłaszcza przy dużych serwisach)
phpion
@sticker:
No fakt, ale wiąże się to, jak słusznie zauważyłeś, z triggerami. Poza tym dodanie takiej funkcjonalności w momencie, gdy projekt jest już w jakiejś fazie (a pewnie jest) wymagałoby ręcznej aktualizacji dotychczasowych danych. Ale prawda jest taka: triggerek w tym momencie to jest to <ok> smile.gif
Wieviór
Serwis jest w fazie (gazie! biggrin.gif) ale ta ilość komentarzy pokazuje się tylko dla ostatnich kilku newsów, więc nie byłoby problemu. Dzięki za wskazówki ;]

EDIT: A jeszcze jedno, czy jest sposób, żeby dodać po prostu 1 do pola INT, czy musiałbym wyciągać wartość, dodawać i zapisywać?

EDIT2: Dzięki ;]
phpion
Cytat(Wieviór @ 3.02.2008, 15:45:31 ) *
EDIT: A jeszcze jedno, czy jest sposób, żeby dodać po prostu 1 do pola INT, czy musiałbym wyciągać wartość, dodawać i zapisywać?

Jest:
  1. UPDATE tabela SET pole=pole+1 WHERE id=X;
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.