Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL][PHP]zagniezdzanie zapytan - pobranie odpowiednich danych
wpaski
post
Post #1





Grupa: Zarejestrowani
Postów: 206
Pomógł: 6
Dołączył: 25.12.2011

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


Jest taka struktura tabeli
Kod
ID | firma | miasto | wojewodztwo

1  | testowa1 | Warszawa | 1
2  | testowa2 | Gdańsk | 12
2  | testowa3 | Otwock| 1


chcę się dostać do tych danych w taki sposób, żeby uzyskać:
Kod
Mazowieckie (2)

Warszawa (1)
Otwock(1)

Pomorskie(1)

Gdańsk(1)


Ta cyferka to ilość firm występujących kolejno w województwie i mieście


Jak to zrobić w jednym zapytaniu SQL, żeby łatwo potem operować na tych danych w PHP?

  1. SELECT COUNT(firma) FROM ( SELECT * FROM tabela WHERE wojewodztwo = 1) AS wojewodztwo;


Takie zapytanie zwraca mi ile jest firm w danym województwie, ale wojewodztwo podalem tu z palca a to powinno wszystko być w SQL, oprócz tego muszą być zwrócone dane które podałem wcześniej, pomoże mi ktoś?

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





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




zwykly SELECT bez zadnych podzapytan. Do tego masz dodac GROUP BY(wojewodztwo)


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
wpaski
post
Post #3





Grupa: Zarejestrowani
Postów: 206
Pomógł: 6
Dołączył: 25.12.2011

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


Dobrze więc muszę tak zrobić czy da się to zrobić lepiej i źle Cię zrozumiałem:

To zapytanie zwraca mi ilość firm w województwach - OK
  1. SELECT COUNT(firma), wojewodztwo FROM tabela GROUP BY wojewodztwo ORDER BY wojewodztwo

co da mi:
Mazowieckie (2)
Pomorskie(1)

Teraz muszę przelecieć pętlą to zapytanie ( W PHP) i dla każdego województwa zapisanego cyferką (1,2,3,4) wykonać takie zapytanie?

  1. SELECT COUNT(firma), miasto FROM tabela WHERE wojewodztwo = 1 GROUP BY miasto ORDER BY miasto


co da mi np.
Warszawa (1)
Otwock(1)


i kolejne zapytanie w pętli da mi dla pomorskiego:
Gdańsk(1)

itd itd dla wszystkich województw czyli 16 zapytań?

Czy da się to zrobić inaczej(lepiej)?

Ten post edytował wpaski 6.02.2015, 10:46:00
Go to the top of the page
+Quote Post
SpiritCode
post
Post #4





Grupa: Zarejestrowani
Postów: 167
Pomógł: 35
Dołączył: 29.12.2014
Skąd: Otwock

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


Zapoznaj się z UNION

  1. SELECT * FROM (
  2. SELECT COUNT(1) AS ile, wojewodztwo AS gdzie, wojewodztwo AS woj FROM tabela GROUP BY wojewodztwo
  3. UNION ALL
  4. SELECT COUNT(1) AS ile, miasto AS gdzie, wojewodztwo AS woj FROM tabela GROUP BY miasto
  5. ) ORDER BY woj


Zobacz czy o to Ci chodziło

Ten post edytował SpiritCode 6.02.2015, 10:48:17
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




W jednym zapytaniu mozna grupowac po wielu polach, nie tylko po jednym


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
wpaski
post
Post #6





Grupa: Zarejestrowani
Postów: 206
Pomógł: 6
Dołączył: 25.12.2011

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


można grupować po wielu, ale nie osiągam tego co chcę, zapytanie:

  1. SELECT COUNT(firma) AS cnt, wojewodztwo, miasto FROM tabela GROUP BY wojewodztwo, miasto ORDER BY wojewodztwo


zwraca mi:
Kod
cnt | wojewodztwo | miasto
6     1           Warszawa
2     1           Otwock


ITD

Czyli liczy mi ile jest FIRM w danym mieście, ale nie potrafę tego zapytania odpowiednio zmodyfikować, żeby dodać zliczanie ile jest FIRM w WOJEWÓDZTWIE, a nie tylko w MIEŚCIE

SpiritCode - nie, nie o to mi chodzi tzn nie działa mimo moich prób, ale chyba nie zrozumiałeś do końca co miałem na myśli.
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  1. SELECT COUNT(wojewodztwo) AS cntwoj,COUNT(miasto) AS cntmia, wojewodztwo, miasto FROM tabela GROUP BY wojewodztwo, miasto ORDER BY wojewodztwo
Powód edycji: [nospor]:


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
wpaski
post
Post #8





Grupa: Zarejestrowani
Postów: 206
Pomógł: 6
Dołączył: 25.12.2011

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


Już tak próbowałem i zliczenia się pokrywają, czyli cntwoj(ilosc firm w województwie) i cntmia (ilosc firm w miescie) mają dokładnie tyle samo, a ilość firm w województwie powinna być większa (sprawdzałem). Nie wiem jak to rozwiązać (można to zrobić w PHP ale jak to zrobić w SQL)

Ten post edytował wpaski 6.02.2015, 15:21:21
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 Aktualny czas: 19.08.2025 - 11:33