Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Join tabeli czy podzapytania z limitem
Forum PHP.pl > Forum > Bazy danych > MySQL
f4ll3ns3raf1n
Nie potrafię sprecyzować mojego pytania, więc opiszę, co chce uzyskać.

mam dwie tabele, załóżmy: pokoje i rezerwacje
w tabeli pokoje mam id_pokoju, nazwe, cena
w tabeli rezerwacje mam id_rezerwacji, id_pokoju (relacja z tabela pokoje), czas_od, czas_do, typ_rezerwacji (1 - zajete, 2 - wstepna)

i teraz chcę pobrać dla np. dnia dzisiejszego listę pokoi wraz z informacją, czy jest zajęte, jesli tak to od kiedy do kiedy...
mogę to zrobić tak:
  1. SELECT *,
  2. (SELECT count(rezerwacje.id_rezerwacji) FROM rezerwacje WHERE rezerawcje.pokoj_id=pokoje.pokoj_id AND WHERE czas_od =< today() AND WHERE czas_do >= today() ORDER BY czas_od ASC LIMIT 1) AS zajetosc,
  3. (SELECT rezerwacje.czas_od FROM rezerwacje WHERE rezerawcje.pokoj_id=pokoje.pokoj_id AND WHERE czas_od =< today() AND WHERE czas_do >= today() ORDER BY czas_od ASC LIMIT 1) AS czas_od,
  4. (SELECT rezerwacje.czas_do FROM rezerwacje WHERE rezerawcje.pokoj_id=pokoje.pokoj_id AND WHERE czas_od =< today() AND WHERE czas_do >= today() ORDER BY czas_od ASC LIMIT 1) AS czas_do,


a może tak?:
  1. SELECT *,
  2. (SELECT rezerwacje.id_rezerwacjifrom rezerwacje WHERE rezerawcje.pokoj_id=pokoje.pokoj_id AND WHERE czas_od =< today() AND WHERE czas_do >= today() ORDER BY czas_od ASC LIMIT 1) AS id_rezerwacji,
  3. JOIN LEFT rezerwacje ON pokoje.id_rezerwacji=rezerwacje.id_rezerwacji



problem polega na tym, że rezerwacji może być sporo (różne terminy), ja potrzebuję tylko tę, która w danym dniu jest znacząca (pokoj wolny lub zarezerwowany_) i całe info o niej.
tabela rezerwacje ma jeszcze typ rezerwacji, ale dla czytelnosci pominalem go, bo potrafię sobie dodać nową linijkę where typ_rezerwacji.... :-)

  1. SELECT pokoje.*, rezerwacje.*
  2. FROM pokoje
  3. LEFT JOIN rezerwacje ON pokoje.pokoj_id=rezerwacje.pokoj_id
  4.  
  5. WHERE rezerwacje.czas_od <= now()
  6. AND rezerwacje.czas_do >= now()


dotarłem do takiego kodu jak powyżej,

taki kod zaś zwraca mi tylko liste pokoi z rezerwacjami, a ja chciałbym by była cała lista pokoi z info o rezerwacji wtedy gdy istnieje....

// ROZWIĄZANE

znalazłem, problemem było WHERE :-)

  1. SELECT pokoje.*, rezerwacje.*
  2. FROM pokoje
  3. LEFT JOIN rezerwacje ON pokoje.pokoj_id=rezerwacje.pokoj_id
  4.  
  5. AND rezerwacje.czas_od <= now()
  6. AND rezerwacje.czas_do >= now()
  7.  
mmmmmmm
Piszesz, że rozwiązaniem było WHERE, a warunek dajesz w JOIN, a nie we WHERE, a to spora różnica...
f4ll3ns3raf1n
i tutaj był mój problem ulokowany :-)
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.