Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP]zagniezdzanie zapytan - pobranie odpowiednich danych
Forum PHP.pl > Forum > Przedszkole
wpaski
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ś?

nospor
zwykly SELECT bez zadnych podzapytan. Do tego masz dodac GROUP BY(wojewodztwo)
wpaski
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)?
SpiritCode
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
nospor
W jednym zapytaniu mozna grupowac po wielu polach, nie tylko po jednym
wpaski
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.
nospor
  1. SELECT COUNT(wojewodztwo) AS cntwoj,COUNT(miasto) AS cntmia, wojewodztwo, miasto FROM tabela GROUP BY wojewodztwo, miasto ORDER BY wojewodztwo
wpaski
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)
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.