Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Liczenie wierszy, Liczenie funkcją count w sql vs stworzenie zmiennej
Aloons
post 3.11.2017, 20:59:47
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 3.11.2017

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


Witam, jak powinno się zliczać wiersze w bazie danych?
Są mi znane 2 opcje:
1. Liczenie poprzez sql count - brak możliwości pomyłki, dłuższy czas
2. Stworzenie zmiennej która będzie aktualizowana po każdej zmianie - możliwość pomyłki, krótszy czas (np kolumny `liczba ocen` w tabeli uczen)

Powiedzmy, że mam w bazie danych tabelkę oceny i chciałbym zliczyć ilość ocen u ucznia.

Go to the top of the page
+Quote Post
Tomplus
post 3.11.2017, 21:40:02
Post #2





Grupa: Zarejestrowani
Postów: 1 836
Pomógł: 226
Dołączył: 20.03.2005
Skąd: Będzin

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


A co wpisujesz w COUNT?
bo najlepiej użyć
Kod
SELECT COUNT(1) FROM table
Go to the top of the page
+Quote Post
Aloons
post 3.11.2017, 21:53:25
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 3.11.2017

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


Cytat(Tomplus @ 3.11.2017, 21:40:02 ) *
A co wpisujesz w COUNT?
bo najlepiej użyć
Kod
SELECT COUNT(1) FROM table

ehhh.... Jest to tylko przykład, pytam się o radę jak profesjonalnie powinno się rozwiązać ten problem, to wszystko.
Go to the top of the page
+Quote Post
Tomplus
post 4.11.2017, 10:36:25
Post #4





Grupa: Zarejestrowani
Postów: 1 836
Pomógł: 226
Dołączył: 20.03.2005
Skąd: Będzin

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


Ale tutaj nie ma nic więcej, może co najwyżej jeszcze skorzystać z funkcji PDO

  1. $query->rowCount();


Ale dostaniesz wynik po wykonaniu polecenia SELECT, UPDATE, INSERT czy DELETE. Czyli nie musisz odpytywać dwa razy bazy tylko po aby sprawdzić ile jest rekordów.

COUNT(1) jest np. lepsze od COUNT(*) bo mniej obciąża procesor serwera.

Ten post edytował Tomplus 4.11.2017, 10:40:12
Go to the top of the page
+Quote Post
sabat24
post 4.11.2017, 11:07:21
Post #5





Grupa: Zarejestrowani
Postów: 175
Pomógł: 26
Dołączył: 13.09.2007
Skąd: Gdańsk

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


Cytat
2. Stworzenie zmiennej która będzie aktualizowana po każdej zmianie - możliwość pomyłki, krótszy czas (np kolumny `liczba ocen` w tabeli uczen)

To jest denormalizacja i stosuje się powszechnie w celach optymalizacyjnych. Wszystko zależy od rodzaju obliczeń, częstotliwości zmiany i tego jak czesto odczytujesz daną wartość. Przykładowo jeśli ktoś dodaje post na forum do tematu raz na kilka godzin, a wyświetlenie liczby postów w tematach odbywa się co parę minut, nie ma sensu tego za każdym razem obliczać.

Sama kwestia implementacji i pomyłek.
Po pierwsze możesz to wyrzucić poza logikę aplikacji i zrobić triggery w bazie, które będą aktualizować same wszystkie pola w zależności od zapytań idących do bazy.
Po drugie nie zawsze musisz inkrementować wartość o jeden po akcji dodającej. Jeśli zapis jest rzadki, odczyt częsty i nie do końca chcesz tworzyć całą logikę związaną z inkrementacją, zawsze możesz puścić COUNT po stworzeniu rekordu i zapisać tę wartość, co zwróci.
Go to the top of the page
+Quote Post
viking
post 4.11.2017, 11:51:48
Post #6





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Widok zmaterializowany.... oh, wait. To mySQL wink.gif


--------------------
Go to the top of the page
+Quote Post
Aloons
post 4.11.2017, 17:44:13
Post #7





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 3.11.2017

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


ok, dzięki za odpowiedzi

@Tomplus trochę źle zrozumiałem na początku facepalmxd.gif
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: 26.04.2024 - 11:28