• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

php + sql -> wynik na stronie

Object Storage Arubacloud
0 głosów
344 wizyt
pytanie zadane 16 maja 2015 w PHP przez Damianexo Obywatel (1,710 p.)
Cześć!

Zacznijmy od tego, że baza danych wygląda mniej więcej tak:

id, imie, nazwisko, ... , miasto, wojewodztwo

Teraz każdy może wybrać inne wojewodztwo- z listy i pytanie, jak pokazać na stronie- w formie cyfrowej, że np:

Podkarpacie: 12
Małopolska: 8

Jakiego użyć zapytania, bo zwykłego na ilość rekordów raczej nie, coś mi świta że "where wojewodztwo=podkarpacie" ale więcej to nie wiem :P

2 odpowiedzi

+1 głos
odpowiedź 16 maja 2015 przez ArturB Mądrala (6,060 p.)
W tym przykładzie to numer 12 odpowiada nazwie Podkarpacie, a 8 Małopolska czy to jest np liczba ile osób wybrało poszczególne województwo ?
komentarz 16 maja 2015 przez Damianexo Obywatel (1,710 p.)
Tak, to liczba osób które wpisała województwo podkarpackie.

Chciałbym zrobić statystykę na stronie- ile osób np dołączyło z tego i z tego województwa.

Czyli to wyglądałoby tak:

id, imie, nazwisko, .., miasto, wojewodztwo
17, Janek, Kowalski, ..., Krakow, malopolskie,

- wojewodztwa są wybierane na zasadzie: opcji wyboru, więc nikt nie będzie miał tego pola inaczej niż jest w tych opcjach wyboru np: podkarpacie, malopolska, kuj-pom, itd
komentarz 16 maja 2015 przez ArturB Mądrala (6,060 p.)
edycja 16 maja 2015 przez ArturB
SELECT COUNT(*) FROM tabela WHERE wojewodztwo='podkarpacie'

coś takiego zwraca liczbę wyników gdzie województwo ma daną wartość

 

A odnośnie tabeli to ja bym rozdzielił ją przynajmniej na dwie, ponieważ województwo będzie się często powtarzało dlatego dałbym je do osobnej a do tej dodał klucz obcy, ponieważ szybciej baza danych przeszuka liczbę niż napis. Ta druga tabela miałaby tylko 16 wierszy z województwami i mimo że w niej by się szukało napisu to i tak tylko w 16 wierszach. - takie jest moje zdanie

0 głosów
odpowiedź 16 maja 2015 przez hoktaur Pasjonat (22,250 p.)
A może coś bardziej rozbudowanego:

SELECT CONCAT(miasto, ':'), COUNT(miasto) FROM tabela GROUP BY miasto ORDER BY miasto;
komentarz 16 maja 2015 przez Damianexo Obywatel (1,710 p.)
A teraz prosiłbym o rozwinięcie :D bo nie za bardzo rozumiem co za co odpowiada. CONCAT to pierwsze słyszę i takie ':' w nawiasie. :P
komentarz 16 maja 2015 przez Boshi VIP (100,240 p.)
edycja 16 maja 2015 przez Boshi
To jest konkatenacja w sql (łączenie dwóch ciągów), czyli łączy miasto z  dwukrokiem.

Rozdziel przedwszystkim te tabele bo to co masz jest nieeefektywne. Tabela ludzie czy jak tam sobie nazwiesz;

id, imie, nazwisko, id_woj

tabela woj

id_woj,  miasto, województwo

dane wyciągasz inner joinem  bo zakładam, że każdy user musi być przyporządkowany do jakiegoś miasta/woj a jeśli nie to left join.
komentarz 16 maja 2015 przez hoktaur Pasjonat (22,250 p.)

Spróbujmy przejść chyba do 4. punktu Blooma Analiza

Masz tabele: otrzymasz ją za pomocą: (tak, chciało mi się ją stworzyć żeby ci to lepiej zobrazować)

SELECT * FROM test;

+------+-----------+---------------+----------+--------------+
| id   | imie      | nazwisko      | miasto   | województwo  |
+------+-----------+---------------+----------+--------------+
|    1 | Andrzej   | Kowal         | Łańcut   | Podkarpacie  |
|    2 | Waldek    | Kowal         | Łańcut   | Podkarpacie  |
|    3 | Tomasz    | Kowalski      | Mielec   | Podkarpacie  |
|    4 | Leonard   | Kowalewski    | Mielec   | Podkarpacie  |
|    5 | Zdzisław  | Streczykowski | Mielec   | Podkarpacie  |
|    6 | Ryszard   | Storczykowski | Mielec   | Podkarpacie  |
|    7 | Agata     | Storczykowska | Mielec   | Podkarpacie  |
|    8 | Firek     | Danielewicz   | Sanok    | Podkarpacie  |
|    9 | Bartosz   | Waledzewicz   | Sanok    | Podkarpacie  |
|   10 | Agata     | Waledzewicz   | Sanok    | Podkarpacie  |
|   11 | Ania      | Waledzewicz   | Kraków   | Małopolska   |
|   12 | Heniek    | Waldemarowicz | Kraków   | Małopolska   |
|   13 | Bartosz   | Nowak         | Narol    | Podkarpacie  |
|   14 | Heniek    | Nosal         | Sieniawa | Podkarpacie  |
|   18 | Heniek    | Nosal         | Sieniawa | Małopolska   |
|   15 | Zenek     | Wojna         | Sieniawa | Małopolska   |
|   16 | Zdenek    | Smietana      | Sieniawa | Małopolska   |
|   17 | Waldemar  | Smietana      | Dębica   | Małopolska   |
|   19 | Kazio     | Smietana      | Dębica   | Małopolska   |
|   20 | Adam      | Zadyma        | Dębica   | Małopolska   |
+------+-------------+---------------+----------+--------------+
 

Filtrujemy,żeby tylko wyświetlić województwa:

SELECT województwo FROM test;

+-------------------+
| województwo |
+-------------------+
| Podkarpacie  |
| Podkarpacie  |
| Podkarpacie  |
| Podkarpacie  |
| Podkarpacie  |
| Podkarpacie  |
| Podkarpacie  |
| Podkarpacie  |
| Podkarpacie  |
| Podkarpacie  |
| Małopolska   |
| Małopolska   |
| Podkarpacie  |
| Podkarpacie  |
| Małopolska   |
| Małopolska   |
| Małopolska   |
| Małopolska   |
| Małopolska   |
| Małopolska   |
+------------------+

Teraz grupujemy wpisy:

SELECT województwo FROM test GROUP BY województwo;

+--------------------+
| województwo  |
+--------------------+
| Małopolska     |
| Podkarpacie   |
+--------------------+

Teraz doklejamy ':' do każdego województwa:

SELECT CONCAT(województwo, ':') FROM test GROUP BY województwo;

+---------------------------------------+
| CONCAT(województwo, ':')  |
+---------------------------------------+
| Małopolska:                      |
| Podkarpacie:                     |
+---------------------------------------+
SELECT CONCAT(województwo, ':'), COUNT(województwo) FROM test GROUP BY województwo;

+---------------------------------------+----------------------------------+
| CONCAT(województwo, ':')  | COUNT(województwo)  |
+---------------------------------------+----------------------------------+
| Małopolska:                      |                                 8 |
| Podkarpacie:                    |                                12 |
+---------------------------------------+----------------------------------+

Można jeszcze poukładać, żeby wyszło tak jak tam miałeś (w twoim wypadku od tyłu):

SELECT CONCAT(województwo, ':'), COUNT(województwo) FROM test GROUP BY województwo ORDER BY województwo DESC;

+---------------------------------------+----------------------------------+
| CONCAT(województwo, ':')  | COUNT(województwo)  |
+---------------------------------------+----------------------------------+
| Podkarpacie:                     |                               12 |
| Małopolska:                      |                                 8 |
+---------------------------------------+----------------------------------+

 

komentarz 31 maja 2015 przez Mieszko I Stary wyjadacz (10,980 p.)
Mam taką małą uwagę. Dębica leży w województwie podkarpackim.
komentarz 4 czerwca 2015 przez hoktaur Pasjonat (22,250 p.)
ehhh racja, pewnie też jeszcze mi ktoś przygarnie, że mam błędy ortograficzne ... zapomiałem jak to jest na forum ... własnie dlatego głównie czytam a nie piszę a jak już czytam to przechodzę przez stos nie mających nic do rzeczy z odpowiedzią

P.S. thx za info... ale nie poprawie :D
komentarz 4 czerwca 2015 przez Mieszko I Stary wyjadacz (10,980 p.)
Nie martw się. Każdemu zdarzają się błędy.

Podobne pytania

0 głosów
2 odpowiedzi 320 wizyt
pytanie zadane 14 maja 2015 w PHP przez Damianexo Obywatel (1,710 p.)
+2 głosów
2 odpowiedzi 813 wizyt
pytanie zadane 22 kwietnia 2015 w PHP przez Damianexo Obywatel (1,710 p.)
0 głosów
2 odpowiedzi 207 wizyt
pytanie zadane 21 kwietnia 2015 w PHP przez Damianexo Obywatel (1,710 p.)

92,568 zapytań

141,422 odpowiedzi

319,638 komentarzy

61,957 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...