
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,
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
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
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ć?
