Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jaki Rodzaj Licznika
Forum PHP.pl > Forum > PHP
m2ka
Witam wszystkich.

Od jakiegoś czasu zastanawiam się nad sposobem zliczania różnych rekordów i ciekawy jestem jakie rozwiązania stosujecie. Przykładowo mamy tabele "jakiś" produktów, w tabelce są informacje np 3 kolumny (id, nazwa_produktu, user) i wchodząc na odpowiednią stronę użytkownik widzi "ilość swoich produktów" (np 300).

Czy aby stworzyć taki licznik używacie zapytań SQL polegających na "zliczaniu rekordów" np.
SELECT COUNT(*) FROM tabela WHERE user='ktoś tam'.....
albo inne zapytania (tu prosił bym o wskazanie najbardziej wydajnego).

...Czy, może zamiast tego stosujecie osobną tabele o nazwie np "liczniki" i tam w odpowiedniej kolumnie za każdym razem zwiększana lub zmniejszana zostaje wartość (+1 lub -1) gdy użytkownik dodaje lub odejmuje "jakiś" produkt. Przy takim układzie nie było by już później potrzeby "zliczania" rekordów tylko wystarczyło, by wyświetlić wartość odpowiedniej komórki.
franki01
Każdy przypadek trzeba rozważać indywidualnie. Jeżeli produktów jest bardzo dużo, to przydatniejsze będzie trzymanie takich danych w innym miejscu. Aktualizacja licznika następowałaby tylko przy zaplanowanej zmianie ilości rekordów przez zdefiniowaną do tego funkcję. Jeżeli rekordów jest mało, a ilość wizyt nie jest pokaźna, nie warto bawić się w takie rzeczy i marnować czas i miejsce na dysku. Osobiście wolę przetrzymywanie danych o rekordach w innej tabeli i wyciąganie jej razem z całym artykułem albo newsem. Do tego klasa aktualizująca wywoływana przy każdej zaplanowanej zmianie ilości rekordów + na wszelki wypadek cron i śmiga jak ta lala.

EDIT:
Aktualizacja ilości powiązanych rekordów, powinna odbywać się za każdym razem poprzez "SELECT COUNT(*) FROM tabela WHERE id_czegos=1", a nie dodawanie i odejmowanie od poprzedniej wartości.
MateuszS
a mysql_num_rows() ?
franki01
Cytat(MateuszScirka @ 5.09.2009, 13:27:39 ) *
a mysql_num_rows() ?

Przy dużych ilościach rekordów mało wydajny sposób. Widać kilkusekundowe różnice w ładowaniu strony.
erix
Cytat
...Czy, może zamiast tego stosujecie osobną tabele o nazwie np "liczniki" i tam w odpowiedniej kolumnie za każdym razem zwiększana lub zmniejszana zostaje wartość (+1 lub -1) gdy użytkownik dodaje lub odejmuje "jakiś" produkt. Przy takim układzie nie było by już później potrzeby "zliczania" rekordów tylko wystarczyło, by wyświetlić wartość odpowiedniej komórki.

Ja wrzucam po prostu osobną kolumnę jeśli są zależności, np. jest tabela newsy i ważna jest liczba komentarzy. No to tę liczbę zapisuję na sztywno. :]

Cytat
a mysql_num_rows() ?

A na co? Można przecież utworzyć triggera albo drugim zapytaniem zwiększać tę kolumnę, o której wspomniałem. Jeśli już liczyć, ile wyjdzie po stronie klienta - jest taka fajna funkcja FOUND_ROWS(); pod MSSQL też jest coś podobnego.
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.