Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Zapytanie do rezerwacji
-Dixu-
post 22.12.2013, 16:19:39
Post #1





Goście







Witam

Mam problem ze stworzeniem zapytania, posiadam dwie tabele:

rezerwacja
id_rezerwacji, id_klienta, id_pokoju, data_od, data_do

pokoj
id_pokoju, tytul, opis, cena

potrzebuje wyciągnąć wszystkie dane z tabeli Pokoj których id_pokoju nie znajduje się w tabeli Rezerwacja pomiędzy data_od oraz data_do. A mianowicie chodzi o to aby wynikiem zapytania były wolne pokoje w podanym przez użytkownika przedziale czasowym.

Wyszło mi coś takiego:

SELECT * from pokoje WHERE ID_pokoju <>(SELECT ID_pokoju, data_od, data_do FROM rezerwacja WHERE data_od="$data_od AND data_do=$data_do)

lecz niestety nie działa
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
Kshyhoo
post 22.12.2013, 17:48:52
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Używaj szukajki.


--------------------
Go to the top of the page
+Quote Post
-Dixu-
post 22.12.2013, 18:18:02
Post #3





Goście







Dziękuję, przeczytałem temat przerobiłem zapytanie :

SELECT * FROM `pokoj` LEFT JOIN `rezerwacja` ON `ID_rezerwacji` = `ID_pokoju` WHERE (`data_od` BETWEEN '2013-12-28' AND '2013-12-30') OR (`data_do` BETWEEN '2013-12-28' AND '2013-12-30');

lecz wyświetla błąd:

Column 'ID_pokoju' in on clause is ambiguous
Go to the top of the page
+Quote Post
Turson
post 22.12.2013, 18:33:48
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Czytać błędy umiesz?

  1. SELECT * FROM `pokoj` LEFT JOIN `rezerwacja` ON `ID_rezerwacji` = `pokoj.ID_pokoju` WHERE (`data_od` BETWEEN '2013-12-28' AND '2013-12-30') OR (`data_do` BETWEEN '2013-12-28' AND '2013-12-30');
Go to the top of the page
+Quote Post
-Dixu-
post 22.12.2013, 18:35:53
Post #5





Goście







wszystko działa bardzo dziękuje za pomoc
Go to the top of the page
+Quote Post
-Dixu-
post 22.12.2013, 19:52:38
Post #6





Goście







z góry przepraszam za zamieszanie, zapytanie działa lecz dla wyświetlenia zarezerwowanych pokoi, jak przerobić zapytanie aby wyciągało wszystkie dane z tabeli Pokoj których id_pokoju nie znajduje się w tabeli Rezerwacja pomiędzy data_od oraz data_do. A mianowicie chodzi o to aby wynikiem zapytania były wolne pokoje w podanym przez użytkownika przedziale czasowym.

to zapytanie pokazuje wolne pokoje, lecz jedynie wtedy gdy w dacie od do zarezerwowany jest jakiś pokój.

SELECT * FROM `pokoj` v LEFT JOIN `rezerwacja`a ON a.ID_pokoju != v.ID_pokoju WHERE (`data_od` BETWEEN '2013-12-24' AND '2013-12-27') OR (`data_do` BETWEEN '2013-12-24' AND '2013-12-27')

Go to the top of the page
+Quote Post
Kshyhoo
post 22.12.2013, 20:06:38
Post #7





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Skoro w Twoim zapytaniu a.ID_pokoju != v.ID_pokoju, to pomyśl...


--------------------
Go to the top of the page
+Quote Post
-Dixu-
post 22.12.2013, 20:16:34
Post #8





Goście







myślę cały czas, a.ID_rezerwacji != v.ID_pokoju pokazuje wszystkie pokoje także zarezerwowany
Go to the top of the page
+Quote Post
Kshyhoo
post 22.12.2013, 20:39:55
Post #9





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Pokaż, jak wygląda struktura bazy.


--------------------
Go to the top of the page
+Quote Post
-Passion guscho-
post 22.12.2013, 20:46:29
Post #10





Goście







baza danych posiada tabele:

rezerwacja
id_rezerwacji, id_klienta, id_pokoju, data_od, data_do

pokoj
id_pokoju, tytul, opis, cena

posiada również tabele:
firma, klienci, pracownicy

lecz chyba nie są one istotne dla skrypty
Go to the top of the page
+Quote Post
Kshyhoo
post 22.12.2013, 20:53:14
Post #11





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Skoro nie trzymasz w bazie, czy pokój jest zajęty czy wolny, to jedyną metodą pobrania wolnych pokoi jest pobranie różnych od zawierających się w data_od i data_do. Jeżeli nie ma daty, to znaczy, że jest wolny.


--------------------
Go to the top of the page
+Quote Post
-Dixu-
post 22.12.2013, 20:57:52
Post #12





Goście







wiem, napisałem w pierwszym poście to samo tylko innymi słowami i mam zapytanie które wyświetla ale pokoje zarezerwowane w danym terminie :

SELECT * FROM `pokoj` v LEFT JOIN `rezerwacja`a ON a.ID_pokoju = v.ID_pokoju WHERE (`data_od` BETWEEN '2013-12-24' AND '2013-12-27') OR (`data_do` BETWEEN '2013-12-24' AND '2013-12-27')

i tu moje pytanie, czy mógł byś je przerobić lub chociaż powiedzieć jak to zrobić tak aby robiły to co napisałeś w poście wyżej ? ponieważ nie mam zielonego pojęcia jak to zrobić a bardzo mi to potrzebne

z góry dziękuje.
Go to the top of the page
+Quote Post
-Dixu-
post 22.12.2013, 21:38:09
Post #13





Goście







Lub może podpowiesz jak zmienić bazę danych aby można było to wykonać łatwiej.
Go to the top of the page
+Quote Post
-Dixu-
post 22.12.2013, 21:50:58
Post #14





Goście







działa biggrin.gif, może komuś się kiedyś przyda:

SELECT * FROM `pokoj` v LEFT JOIN `rezerwacja`a ON a.ID_pokoju = v.ID_pokoju WHERE (`data_od` IS NULL OR `data_od` NOT BETWEEN '2013-12-24' AND '2013-12-27') OR (`data_do` IS NULL OR `data_do` NOT BETWEEN '2013-12-24' AND '2013-12-27')
Go to the top of the page
+Quote Post
-Dixu-
post 7.01.2014, 00:37:30
Post #15





Goście







Zapytanie jednak nie działa tak jak bym chciał. Gdy pokój jest zarezerwowany tylko w jednym terminie zapytanie działa prawidłowo, lecz gdy jeden pokój zarezerwowany jest w kilku terminach zostaje on wyświetlany kilkukrotnie.

  1. SELECT * FROM `pokoj` v LEFT JOIN `rezerwacja`a ON a.ID_pokoj = v.ID_pokoju WHERE (`data_od` IS NULL OR `data_do` NOT BETWEEN '2014-01-08 14:00' AND '2014-01-09 12:00' AND `data_od` NOT BETWEEN '2014-01-08 14:00' AND '2014-01-09 12:00')


jest to spowodowane tym że zapytanie wyciąga wszystkie pokoje które nie są pomiędzy podanymi datami, lecz jeśli pokój jest zarezerwowany w innym terminie to mimo tego jest wyświetlany. Jak zmodyfikować zapytanie aby wyświetlało pokoje które w podanym przedziale czasowym nie są zarezerwowane.

Bardzo proszę o pomoc przeszukałem wiele tematów i nigdzie nie znalazłem rozwiązania
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 24.07.2025 - 16:03