Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pusty rekord, Jak wyświetlić
mimol
post 28.08.2010, 13:36:17
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 5
Dołączył: 10.12.2007

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


Mam dwie tabele które wyglądają tak:
tabela pracodawcy

id....|miasto_id.......|nazwa...........
1.....|1....................|Budo-remont
2.....|4....................|HiTech
3.....|3....................|Studentowo
4.....|5....................|Szop-Pracz
5.....|2....................|Telefonika S.A.
6.....|1....................|Interneto sc.
7.....|1....................| Poczta Misiowa

tabela miasta

id....|nazwa.........|ludnosc
1.....|Pcim dolny...|1234
2.....|Mala wies....|310
3.....|Dwor...........|55000
4.....|Stolicowo....|3000000
5.....|Srednia wies|7235
6.....|Polakowo....|345000

chciałbym wyświetlić nazwę miasta + nazwa firmy
dając takie zapytanie
Kod
select t1.nazwa, t2.nazwa as nazwa_firmy from miasta t1 inner join pracodawcy t2 on t1.id=t2.miasto_id

Jest prawie dobrze jednak nie otrzymuje rekordu z miastem Polakowo w którym nie pracuje żadna firma..
Jak powinno wyglądać to zapytanie żeby była nazwa miasta i np puste miejsce na firme?

Znalazłem sam odpowiedź wystarczyło zamienić z inner join na left join

Ten post edytował mimol 28.08.2010, 14:11:20
Go to the top of the page
+Quote Post
cojack
post 28.08.2010, 15:05:43
Post #2





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


A wiesz w ogóle dlaczego wystarczyło zmienić z inner join na left join? Bo mi się nie wydaje.

INNER JOIN - nie zwraca wiersza gdy nie znajdzie dopasowania.
LEFT JOIN - dołącza wyniki z lewej kolumny mimo iż nie znajdzie powiązania z prawą kolumną, resztę NULLuje
RIGHT JOIN - na odwrót jak left join
FULL JOIN - zwróci wiersze jak znajdzie w którejkolwiek tabel.


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post
mimol
post 28.08.2010, 15:37:33
Post #3





Grupa: Zarejestrowani
Postów: 247
Pomógł: 5
Dołączył: 10.12.2007

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


Zadanie.
Wypisz ile firm ma swoje siedziby w danym mieście. Rozwiązaniem zadania powinien być wynik wyświetlony w dwóch kolumnach: nazwa miasta + ilość firm w danym mieście. Dane mają być posortowane malejąco (największa ilość pierwsza) po ilości firm w mieście. Nazwy zwracanych pól to odpowiednio: nazwa oraz ilosc

moje zapytanie
  1. select t1.nazwa, t2.nazwa as nazwa_firmy, COUNT(t1.nazwa) as ilosc from miasta t1 left join pracodawcy t2 on t1.id=t2.miasto_id group by t1.nazwa

jak widać w Polakow`ie nie pracuje żadna firma.
Więc udało mi się to zrobić tak jak wyżej.
lub
  1. select t1.nazwa, t2.nazwa as nazwa_firmy, COUNT(t1.nazwa) as ilosc from miasta t1 inner join pracodawcy t2 on t1.id=t2.miasto_id group by t1.nazwa

ale wtedy nie pokazuje Polakowa

Jak zrobić żeby pokazał Polakowo ilosc = 0?
Go to the top of the page
+Quote Post
nospor
post 28.08.2010, 15:48:45
Post #4





Grupa: Moderatorzy
Postów: 36 451
Pomógł: 6292
Dołączył: 27.12.2004




COUNT masz robic po pracodawcach. Przeciez to ich zliczasz a nie miasta.

  1. SELECT t1.nazwa, t2.nazwa AS nazwa_firmy, COUNT(t2.id) AS ilosc FROM miasta t1 LEFT JOIN pracodawcy t2 ON t1.id=t2.miasto_id GROUP BY t1.nazwa


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

"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
mimol
post 28.08.2010, 16:00:46
Post #5





Grupa: Zarejestrowani
Postów: 247
Pomógł: 5
Dołączył: 10.12.2007

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


Dzięki
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 Wersja Lo-Fi Aktualny czas: 23.04.2024 - 13:58