Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL]Optymalne zapytanie do zliczania rekordów
Forum PHP.pl > Forum > Przedszkole
Xeer
Witam.

Mam pewien problem, ponieważ nie mogę wymyślić w jaki sposób optymalnie zliczyć rekordy z różnymi typami ocen.
Chcę sprawdzić ile razy dana osoba dostała 1, 2, 3 itd.

Kod
mysqli_fetch_row(mysqli_query($connection, "SELECT count(*) FROM rating WHERE user='$user[id]' AND ocena='2'"))[0];
mysqli_fetch_row(mysqli_query($connection, "SELECT count(*) FROM rating WHERE user='$user[id]' AND ocena='3'"))[0];
mysqli_fetch_row(mysqli_query($connection, "SELECT count(*) FROM rating WHERE user='$user[id]' AND ocena='4'"))[0];
mysqli_fetch_row(mysqli_query($connection, "SELECT count(*) FROM rating WHERE user='$user[id]' AND ocena='5'"))[0];


Kilka zapytań wygląda dość śmiesznie i niepotrzebnie się wykonują zamulając przy okazji.

Myślałem nad tym, żeby po prostu w tabeli z użytkownikami zrobić kolumnę "oceny" a w niej zapisywać oceny np w tej sposób:
Kod
|0|3|3|1|

Gdzie od lewej to ilość ocen 2, 3, 4, 5 a potem wyciąganie tego np. explode'm, ale to rozwiązanie mi się trochę nie widzi i wolałbym jednak w jakiś optymalny sposób w 1 zapytaniu zliczać wszystkie oceny a potem je wyciągać np:
Kod
echo $query['ocena_2']
echo $query['ocena_3']
...


Rozważałem też opcję zaznaczenia wszystkiego i w pętli while potem zliczanie danych ocen do zmiennych, ale to chyba jeszcze gorszy sposób niż te kilka zapytań...

Ma ktoś może jakieś ciekawe pomysły?

Pozdrawiam serdecznie!
nospor
jedno zapytanie z
GROUP BY ocena
na koncu
trueblue
Dla wybranego użytkownika:
  1. SELECT ocena,COUNT(*) FROM rating WHERE user=xxx GROUP BY ocena;

Dla wszystkich:
  1. SELECT user,ocena,COUNT(*) FROM rating WHERE GROUP BY user,ocena;

Xeer
Cholerka, tyle lat zabawy w SQL i nie wpadłem na tak oczywistą funkcję jak grupowanie... :/
Aż wstyd było zadawać pytanie no ale bywa i tak worriedsmiley.gif
Dziękuję za bardzo szybką pomoc w rozwiązaniu problemu, głowiłem się nad dobrym rozwiązaniem dobre kilka godzin a tutaj w zaledwie kilka minut dostałem świetną pomoc, heh smile.gif

@EDIT:
Na 1 zapytaniu zaoszczędzone około 9ms.
Moim prymitywnym rozwiązaniem: 11.2ms (0.011s)
Waszym rozwiązaniem tak jak ma być: 2.19ms (0.002s)

Łącznie na całym skrypcie zyskałem dzięki temu 280ms i około 60 zapytań mniej.
Dzięki bardzo za pomoc <3
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.