Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Zliczanie wyników z bazy...
--drwal--
post
Post #1





Goście







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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/questionmark.gif)

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
amdziak
post
Post #2





Grupa: Zarejestrowani
Postów: 36
Pomógł: 1
Dołączył: 2.01.2012

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


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
Go to the top of the page
+Quote Post
--drwal--
post
Post #3





Goście







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 (IMG:style_emoticons/default/wink.gif) poszło od strzału (IMG:style_emoticons/default/wink.gif) np dla miast (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/questionmark.gif)



Go to the top of the page
+Quote Post
--drwal--
post
Post #4





Goście







  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...
Go to the top of the page
+Quote Post
amdziak
post
Post #5





Grupa: Zarejestrowani
Postów: 36
Pomógł: 1
Dołączył: 2.01.2012

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


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... (IMG:style_emoticons/default/smile.gif)


a i jeszcze jedno:
dobra praktyka przy order by jest uzywanie numeru kolumny zamiast jej nazwy (IMG:style_emoticons/default/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;


Ten post edytował amdziak 8.03.2014, 17:50:07
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #6





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


  1. SELECT `uczen` , `ocena`, count( * ) AS ilosc FROM `dane` GROUP BY `uczen`, `ocena` ORDER BY ilosc DESC;
Go to the top of the page
+Quote Post
--drwal--
post
Post #7





Goście







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 (IMG:style_emoticons/default/wink.gif) już zatrybiłem składnię (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 21:20