Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]/[MySQL] Zliczanie liczby komentarzy, Optymalizacja
-Wieviór-
post 3.02.2008, 13:10:21
Post #1





Goście







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ł?)
Go to the top of the page
+Quote Post
phpion
post 3.02.2008, 13:36:47
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.

Ten post edytował phpion 3.02.2008, 13:37:47
Go to the top of the page
+Quote Post
sticker
post 3.02.2008, 13:39:22
Post #3





Grupa: Zarejestrowani
Postów: 611
Pomógł: 19
Dołączył: 28.02.2005
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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)


--------------------
Go to the top of the page
+Quote Post
phpion
post 3.02.2008, 13:41:42
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




@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
Go to the top of the page
+Quote Post
-Wieviór-
post 3.02.2008, 13:45:31
Post #5





Goście







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 ;]

Ten post edytował Wieviór 3.02.2008, 13:53:06
Go to the top of the page
+Quote Post
phpion
post 3.02.2008, 13:52:06
Post #6





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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;
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 17:11