Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql] pobranie wolnych pokoi z przedziału czasowego, skomplikowane zapytanie. proszę o pomoc
armata12
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 18.12.2004

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


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...

Ten post edytował armata12 13.08.2008, 09:30:53
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Kicok
post
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


  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.
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: 12.10.2025 - 17:41