Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] pobranie wolnych pokoi z przedziału czasowego
Forum PHP.pl > Forum > Bazy danych > MySQL
armata12
Szukałem dziś rozwiązania mojego problemu przez pare godzin, czytałem różne stronki i fora ale nie udało się, więc postanowiłem napisać na forum.

mam tabelkę z terminami:

  1. object_id|date|status


przykładowe dane w tabeli:

1|20080801|0
1|20080802|0
1|20080803|1
1|20080804|1
1|20080805|1
1|20080806|0


status = 1 - termin zajęty,
gdy status = 0 - termin wolny

oraz tabele z obiektami(pokojami):

  1. id|name|.....


jest jeszcze tabela z cenami:

  1. object_id|season|price



i chce wyszukać wolne obiekty dla jakiegoś przedziału czasowego np. od 20080801 do 20080831,
poniżej podam zapytanie które pobiera pokoje ale nawet wtedy gdy jeden z wybranych dni jest zajęty.

  1. SELECT DISTINCT o.*, (SELECT MIN(price) FROM obiekty_ceny WHERE object_id=o.id AND price > 0) AS price
  2. FROM obiekty AS o, obiekty_terminy AS d WHERE o.active='1' AND (d.`date` BETWEEN '$date_in' AND '$date_out') AND d.`object_id`=o.`id` AND d.`status`='0' ORDER BY o.id DESC


Proszę o pomoc bo już nie mam pomysłów...
Kicok
  1. SELECT `object_id`
  2. FROM `terminy` WHERE ( `status` = 1 ) AND ( `date` BETWEEN 20080801 AND 20080831 )
  3. GROUP BY `object_id`


Tu masz zapytanie wyciągające ZAJĘTE pokoje w danym terminie. Wystarczy użyć go jako podzapytania w taki sposób:
  1. WHERE `object_id` NOT IN ( SELECT `object_id` ... )

i będziesz miał wolne pokoje.


Swoją drogą głupio zaprojektowana baza danych.
armata12
Dziękuję za pomoc! Tak, wiem że pomysł z terminami nie jest dobry ale nie mogłem wymyślić czegoś innego żeby spełniało moje wymagania a druga sprawa pewnie za głupi jestem...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.