Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: LEFT JOIN - prośba o wytłumaczenie zapytania
Forum PHP.pl > Forum > Bazy danych > MySQL
404
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
irmidjusz
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.
404
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
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.