Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zliczanie wyników z bazy...
Forum PHP.pl > Forum > Przedszkole
-drwal-
Witam serdecznie...
Mam takie pytanie mianowicie jako że rozpocząłem niedawno naukę z php i MySql zwracam się do was zapytaniem... Wymyśliłęm sobie jakiś tam przykład mianowicie załóżmy mam w bazie użytkwonikó z całej Polski załóżmy 1000 i teraz mam o nich takie dane jak województwo i takie jak powiat. I chciałbym zrobić bardzo szybko statystyki mógłbym oczywiście napisać odpowiednie dla każdej opcj zapytanie typu:
  1. SELECT count(*) AS ilosc FROM `dane` WHERE `dane`.`wojewodztwo`='małopolskie';
  2. SELECT count(*) AS ilosc FROM `dane` WHERE `dane`.`wojewodztwo`='śląskie';
  3. SELECT count(*) AS ilosc FROM `dane` WHERE `dane`.`wojewodztwo`='dolnośląskie';


ale nie było by to chyba zbyt efektywne i wydajne zresztą wypisanie wszystkich powiatów trochę by zajęło...

I teraz moje pytanie jak najszybciej zrobić aby wypisało mi dla każdego województwa i dla każdego powiatu ilu jest użytkownikó w bazie...

Nie wiem czy dobrze główkuję ale wymyśliłem coś takiego że najpierw należałoby zliczyć wartości unikalne np dla tabeli `wojewodztwo`
  1. SELECT DISTINCT

i upakować to do zmiennej np $wojewodztwo

i potem chyba o ile dobrze rozumiem odtworzyć dane w pętli while questionmark.gif
  1. {
  2. SELECT count(*) AS ilosc FROM `dane` WHERE `dane`.`wojewodztwo`='".$wojewodztwo."';
  3. $ile1 = $db->query($ile);
  4. $ilosc = $ile1->fetch_assoc();
  5.  
  6. $mp=$ilosc['ilosc'];
  7. echo ('W województwie: '.$wojewodztwo.' jest zarejstrowanych '.$mp.);}


Czy ktoś mógłby mnie naprowadzić jak najlepiej zliczać takie statystyki questionmark.gif

amdziak
Poczytaj o czymś takim jak group by.
dajesz:
  1. select wojewodztwo, count(1) from dane group by wojewodztwo;
  2. select powiat, count(1) from dane group by powiat;


Poczytaj np, tu:

Group by
-drwal-
Cytat(amdziak @ 8.03.2014, 16:08:46 ) *
Poczytaj o czymś takim jak group by.
dajesz:
  1. select wojewodztwo, count(1) from dane group by wojewodztwo;
  2. select powiat, count(1) from dane group by powiat;


Poczytaj np, tu:

Group by



Super o to mi chodziło wink.gif poszło od strzału wink.gif np dla miast wink.gif
  1. SELECT `miasto` , count( * ) AS ilosc FROM `dane` GROUP BY `miasto` ORDER BY ilosc DESC;


A jeszcze inna kwestia... teraz mi tak natchnęło taki hipotetyczny przykład. Mamy uczniów w klasie załóżmy jest ich 30. I mamy bazę ich ocen z każdego przedmiotu. I teraz chcę aby każdemu zliczyło ile ma 1 ile ma 2 ile 3 ile 4 itd...
Przykładowe zapytanie dla oceny 4 dla konkretnego ucznia...

  1. SELECT count(*) AS ilosc FROM `dane` WHERE `dane`.`ocena`='4' AND `dane`.`uczen`='Kowalski Jan';


Czyli jesli z 3 przedmiotów ma ocenę 4 to pokaże mi że Jan Kowalski ma ocenę 4 z 3 przedmiotów.
I pytanie czy to też można w jakiś sposób zautomatyzować tak jak w poprzednim przykłądzie poprzez GROUP BY questionmark.gif



-drwal-
  1. SELECT `uczen` , count( * ) AS ilosc FROM `dane` WHERE ocena=4 GROUP BY `uczen` ORDER BY ilosc DESC;


Coś takiego wymyśliłem.... ale dla każdej oceny musiałbym stworzyć osobne zapytanie SQL...
amdziak
jesli przedmioty sa w tej samej tabeli, to daj jeszcze jakis AND przedmiot IN (wylicz przedmioty) i powinno dzialac - jesli dobrze rozumiem o co Ci chodzi... smile.gif


a i jeszcze jedno:
dobra praktyka przy order by jest uzywanie numeru kolumny zamiast jej nazwy smile.gif
czyli zamiast

  1. SELECT `miasto` , count( * ) AS ilosc FROM `dane` GROUP BY `miasto` ORDER BY ilosc DESC;


daj:

  1. SELECT `miasto` , count( * ) AS ilosc FROM `dane` GROUP BY `miasto` ORDER BY 2 DESC;
mmmmmmm
  1. SELECT `uczen` , `ocena`, count( * ) AS ilosc FROM `dane` GROUP BY `uczen`, `ocena` ORDER BY ilosc DESC;
-drwal-
Cytat(mmmmmmm @ 8.03.2014, 18:40:27 ) *
  1. SELECT `uczen` , `ocena`, count( * ) AS ilosc FROM `dane` GROUP BY `uczen`, `ocena` ORDER BY ilosc DESC;



Dzięki o to mi chodziło wink.gif już zatrybiłem składnię wink.gif
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.