![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 50 Pomógł: 0 Dołączył: 11.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam problem z zapytaniem SQL. Stworzyłem do systemu newsow komentarze. Na stronie głównej przy każdym newsie licznik pokazuje ile jest komentarzy dla danego newsa. Komentarzy jest jak dużo, że przeliczenie tego obciąża serwer w takim stopniu, że destabilizuje jego prace. Poniżej wklejam zapytanie:
SELECT SQL_CALC_FOUND_ROWS newsy_id,newsy_data,newsy_czas,newsy_licznik,newsy_tytul,newsy_tekstskrocony,new sy_tekstrozszerzony,newsy_foto,fotosy_file,dzialy_nazwa,COUNT(komentarze_id) licznik FROM newsy LEFT JOIN fotosy ON (fotosy_id=newsy_foto) LEFT JOIN dzialy ON (dzialy_id=newsy_dzial) LEFT JOIN komentarze ON (komentarze_news = newsy_id AND komentarze_status = '1') WHERE newsy_status='1' GROUP BY newsy_id ORDER BY newsy_data DESC, newsy_czas DESC LIMIT 0, 25 Będę wdzięczny za uwagi. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 640 Pomógł: 44 Dołączył: 8.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
Baza danych nie jest kalkulatorem i jak będziesz miał dużo rekordów to zwykły COUNT będzie wolny. Rozwiązanie tego to denormalizacja licznika. Ilość komentarzy zapisujesz w tabeli newsa i inkrementujesz go przy dodaniu komentarza. Wyświetlając listę newsów nie musisz wtedy liczyć newsów na żywo.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 10.10.2025 - 12:16 |