![]() |
![]() |
-Dixu- |
![]()
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 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Opiekunowie Postów: 3 855 Pomógł: 317 Dołączył: 4.01.2005 Skąd: że ![]() |
-------------------- Jak poprawnie zadać pytanie | Jak poprawnie zatytułować wątek
Najczęstsze błędy | Błędy E_NOTICE | PHP FAQ | FAQ PHPedia | SQL-Injection | Logowanie i sesje | Hashowanie haseł | Server - od czego zacząć ? | Manual PHP Alternatywne Forum dla Ekspertów Nie pomagam na PW, nie mam GG |
|
|
-Dixu- |
![]()
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 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
-Dixu- |
![]()
Post
#5
|
Goście ![]() |
wszystko działa bardzo dziękuje za pomoc
|
|
|
-Dixu- |
![]()
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') |
|
|
![]()
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...
-------------------- Jak poprawnie zadać pytanie | Jak poprawnie zatytułować wątek
Najczęstsze błędy | Błędy E_NOTICE | PHP FAQ | FAQ PHPedia | SQL-Injection | Logowanie i sesje | Hashowanie haseł | Server - od czego zacząć ? | Manual PHP Alternatywne Forum dla Ekspertów Nie pomagam na PW, nie mam GG |
|
|
-Dixu- |
![]()
Post
#8
|
Goście ![]() |
myślę cały czas, a.ID_rezerwacji != v.ID_pokoju pokazuje wszystkie pokoje także zarezerwowany
|
|
|
![]()
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.
-------------------- Jak poprawnie zadać pytanie | Jak poprawnie zatytułować wątek
Najczęstsze błędy | Błędy E_NOTICE | PHP FAQ | FAQ PHPedia | SQL-Injection | Logowanie i sesje | Hashowanie haseł | Server - od czego zacząć ? | Manual PHP Alternatywne Forum dla Ekspertów Nie pomagam na PW, nie mam GG |
|
|
-Passion guscho- |
![]()
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 |
|
|
![]()
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.
-------------------- Jak poprawnie zadać pytanie | Jak poprawnie zatytułować wątek
Najczęstsze błędy | Błędy E_NOTICE | PHP FAQ | FAQ PHPedia | SQL-Injection | Logowanie i sesje | Hashowanie haseł | Server - od czego zacząć ? | Manual PHP Alternatywne Forum dla Ekspertów Nie pomagam na PW, nie mam GG |
|
|
-Dixu- |
![]()
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. |
|
|
-Dixu- |
![]()
Post
#13
|
Goście ![]() |
Lub może podpowiesz jak zmienić bazę danych aby można było to wykonać łatwiej.
|
|
|
-Dixu- |
![]()
Post
#14
|
Goście ![]() |
działa
![]() 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') |
|
|
-Dixu- |
![]()
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.
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 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.07.2025 - 16:03 |