Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapytanie sql sprawdzające wolny termin, na podstawie daty od i daty do
ze4lot
post
Post #1





Grupa: Zarejestrowani
Postów: 54
Pomógł: 1
Dołączył: 29.03.2007
Skąd: Kraków

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


Witam,

Przestudiowałem sobie już istniejące tematy na ten temat i albo coś mi nie działało albo dotyczyło odwrotnej sytuacji czyli zwracało wolne pokoje w danym terminie.

Do rzeczy:

Tabela reservations:
obj_id (id obiejktu/pokoju do rezerwacji),
date_from (data od),
date_to (data do)
status (załóżmy, że zawsze 1),

  1. SELECT * FROM `reservations` WHERE
  2. ((`date_from` <= $date_from AND `date_to` >= $date_from) OR
  3. (`date_from` <= $date_to AND `date_to` >= $date_to))
  4. AND `status` = 1 AND `obj_id` = $obj_id


Zapytanie zostało wygenerowane przez kod PHP (eloquent):

  1. protected function checkByStatus($obj_id, $date_from, $date_to, $status) {
  2.  
  3. $query = $this->newQuery();
  4. $query->where(function($query) use ($date_from, $date_to) {
  5. $query->where(function($query) use ($date_from) {
  6. $query->where('date_from', '<=', $date_from)
  7. ->where('date_to', '>=', $date_from);
  8. });
  9. $query->orWhere(function($query) use ($date_to) {
  10. $query->where('date_from', '<=', $date_to)
  11. ->where('date_to', '>=', $date_to);
  12. });
  13. });
  14. $query->where('status', $status);
  15. $query->where('obj_id', $obj_id);
  16. //return dd($query->toSql());
  17. if($query->count() == 0)
  18. return true;
  19. return false;
  20. }


Niestety powyższy kod nie działa prawidłowo i w niektórych przypadkach zwraca wolny termin pomimo, że nie jest wolny.
Bardzo proszę o pomoc w poprawieniu zapytania oraz odpowiedzenie na poniższe pytania:

1. Czy zmienne $date_to i $date_from mogą być zwykłymi stringami (2012-07-03)?
2. Czy właściwie ustawiłem typ kolumn date_from i date_to jako Date?

PS.
Jeżeli jest już na forum rozwiązanie to proszę o linka, mnie osobiście nie udało się znaleźć.



Ten post edytował ze4lot 9.07.2013, 13:05:05
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
ze4lot
post
Post #2





Grupa: Zarejestrowani
Postów: 54
Pomógł: 1
Dołączył: 29.03.2007
Skąd: Kraków

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


Dzięki za odpowiedź, niestety zapytanie również nie jest poprawne, ponieważ np. przy zarezerwowanym już terminie od 2013.07.03 do 2013.07.06 termin od 2013.07.01 do 2013.07.07 jest uznany za wolny, co jest błędem.

Nie wyjaśniłem tego wcześniej ale np. mając już rezerwacje 2013.07.03 do 2013.07.06, terminy od 2013.07.06 są wolne, bo 07.06 nikt już nie nocuje.
Go to the top of the page
+Quote Post

Posty w temacie


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: 27.09.2025 - 05:10