Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Pomoc przy stworzeniu zapytania
KorWojci
post
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 10.01.2015

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


Witam,

w mojej bazie danych mam 2 tabele tworzone takimi zapytaniami:
  1. CREATE TABLE Order_Rooms
  2. (
  3. ID_OR INT NOT NULL AUTO_INCREMENT,
  4. ID_Room INT NOT NULL,
  5. DateFrom DATE NOT NULL,
  6. DateTo DATE NOT NULL,
  7. PRIMARY KEY(ID_OR),
  8. FOREIGN KEY(ID_Room) REFERENCES Rooms(ID_Room)
  9. )
  10.  
  11. CREATE TABLE Rooms
  12. (
  13. ID_Room INT NOT NULL AUTO_INCREMENT,
  14. Capacity INT NOT NULL,
  15. StandardPrice DECIMAL(9,2),
  16. PRIMARY KEY(ID_Room)
  17. )


Chodzi o to, że w tabeli Order_Rooms przechowywane jest ID_Room i daty w jakich jest on zarezerwowany. Próbuję stworzyć zapytanie, które będzie mi zwracało ID_Rooms, które jest "wolne" w danym okresie czasu (mam 2 daty pobrane, powiedzmy data1 i data2). Stworzyłem zapytanie, które co prawda pokazuje tylko te rekordy, które są zajęte poza wybranym okresem ale niestety wyświetla też ID_Room tego, które jest zajęte.
Żeby zobrazować to powiedzmy że w Order_Rooms mamy takie rekordy:
  1. 1 1 '2015-01-13' '2015-01-15'
  2. 2 2 '2015-02-18' '2015-02-21'
  3. 3 1 '2015-02-10' '2015-02-13'

I powiedzmy, że pokój z ID=3 w ogóle nie jest zarezerwowany. Chcemy sprawdzić czy jest jakiś wolny pokój w terminie od '2015-01-12' do '2015-01-16' czyli wszystkie ID_Room, które są w tabeli Rooms i nie są zajęte w tym terminie. I moje zapytanie zwraca mi tylko coś takiego (wyświetlam wszystko żeby zobrazować):
  1. 2 2 '2015-02-18' '2015-02-21'
  2. 3 1 '2015-02-10' '2015-02-13'

A powinno zwrócić tylko 2 id (ID_Room=2 i ID_Room=3)
Zapytanie wygląda tak:
  1. SELECT Rooms.ID_Room, Order_Rooms.DateFrom, Order_Rooms.DateTo FROM Rooms LEFT JOIN Order_Rooms ON Rooms.ID_Room=Order_Rooms.ID_Room WHERE DateFrom>='2015-01-13' OR DateTo<='2015-01-10'

Możecie mi pomóc z tym zapytaniem? Mam nadzieję, że w miarę trafnie to wytłumaczyłem.



Gdyby ktoś miał podobny problem wrzucam swoje rozwiązanie smile.gif
  1. SELECT Rooms.ID_Room, Order_Rooms.DateFrom, Order_Rooms.DateTo FROM Rooms LEFT JOIN Order_Rooms ON Rooms.ID_Room=Order_Rooms.ID_Room WHERE Rooms.ID_Room NOT IN (SELECT Rooms.ID_Room FROM Rooms LEFT JOIN Order_Rooms ON Rooms.ID_Room=Order_Rooms.ID_Room WHERE DateFrom BETWEEN 'data1' AND 'data2' OR DateTo BETWEEN 'data1' AND 'data2')


Ten post edytował KorWojci 10.01.2015, 16:32:13
Go to the top of the page
+Quote Post

Posty w temacie
- KorWojci   [MySQL] Pomoc przy stworzeniu zapytania   10.01.2015, 13:25:22
- - mmmmmmm   http://sqlfiddle.com/#!2/34dfa/1   10.01.2015, 15:45:22


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 Aktualny czas: 19.08.2025 - 13:22