Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Join tabeli czy podzapytania z limitem
f4ll3ns3raf1n
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 27.11.2009

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


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.  
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
mmmmmmm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Piszesz, że rozwiązaniem było WHERE, a warunek dajesz w JOIN, a nie we WHERE, a to spora różnica...
Go to the top of the page
+Quote Post
f4ll3ns3raf1n
post
Post #3





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 27.11.2009

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


i tutaj był mój problem ulokowany :-)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 23:18