Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> LEFT JOIN - prośba o wytłumaczenie zapytania
404
post 29.05.2012, 19:09:36
Post #1





Grupa: Zarejestrowani
Postów: 226
Pomógł: 25
Dołączył: 22.05.2011

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


Witam! smile.gif

Opis problemu będzie zawiły, ale postaram się to opisać jak najlepiej potrafię. Do rzeczy.

Mam tabelę, w której przechowuję zdjęcia do rotatora. Wygląda ona tak:
Kod
tab_id,
tab_event_id,
tab_image_big,
tab_image_small

tab_event_id przechowuje id do wydarzenia. Tutaj zaczynają się schody. Dla przykładu - uproszczona tabela wydarzeń wygląda tak:
Kod
event_id
event_object_id
event_object_name
event_object_town_id

1. Jeżeli wydarzenie tyczy się obiektu, który jest w bazie, to pole event_object_name i event_object_town_id są niczym (NULL), np.:
Kod
0, 213, NULL, NULL

W sytuacji takiej jak powyżej identyfikator miasta wyciągam z tabeli obiektów.
2. Jeżeli wydarzenie dotyczy jakiegoś miejsca, którego nie ma w bazie to jest odwrotnie - pole event_object_id staję się nicością (NULL), np.:
Kod
0, NULL, 'Łąka obok miasta', 1


Problem polega na tym żeby wyciągnąć wydarzenia z danego miasta niezależnie od tego, czy miejsce wydarzenia przypisane jest do obiektu, które jest w bazie, czy do "Łąki obok miasta".
Napisałem zapytanie, które... zwraca to co bym chciał:
Kod
SELECT *
FROM rotator
INNER JOIN wydarzenia ON wydarzenia.event_id = rotator.tab_event_id
LEFT JOIN obiekty ON obiekty.object_id = wydarzenia.event_object_id
WHERE obiekty.object_town_id =1 || wydarzenia.event_town_id =1

Tylko za cholerę nie wiem dlaczego z LEFT JOIN działa poprawnie, a z INNER JOIN już nie. Wiem mniej więcej co robią te polecenia, ale nie mogę tego zrozumieć.

Mógłby mi ktoś to wyjaśnić? smile.gif
Go to the top of the page
+Quote Post
irmidjusz
post 30.05.2012, 01:49:50
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

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


INNER JOIN zwróci wynik złączenia, tylko jeśli odpowiednie wiersze istnieją w obu tabelach (po lewej i po prawej stronie).
W przypadku LEFT JOIN, jeśli nie ma wiersza z prawej strony złączenia, to nadal zwracany jest wynik, ale wszystkie wybrane kolumny odnoszące się do prawej tabeli, mają wartość NULL.
Go to the top of the page
+Quote Post
404
post 30.05.2012, 11:06:19
Post #3





Grupa: Zarejestrowani
Postów: 226
Pomógł: 25
Dołączył: 22.05.2011

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


Trochę się pospieszyłem z tym postem na forum. Poczytałem o INNER JOIN i już pare rzeczy się rozjaśniło smile.gif
Tak, czy siak dzięki smile.gif
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: 19.07.2025 - 05:40