Autor | Zpráva | ||
---|---|---|---|
blizzboz Profil |
#1 · Zasláno: 20. 4. 2010, 02:54:13 · Upravil/a: blizzboz
mám dve tabuľky, v jednej mám uložené autá(tabuľka cars) a v druhej zoznam rezervácií áut(tabuľka reservations).
v tom zoznamen rezervácií su dva stĺpce od a do a je tam aj stĺpec auto kde je id auta ktoré je uložené v tabuľke cars keď zadám do dotazu údaje od a do potrebujem aby sa mi z databázy vypísali len tie autá ktoré nie sú v tom zarezervované to znamená u ktorých sa nekríži dátum s tými dátumami ktoré som zadal. vymyslel som si na to tento dotaz: SELECT * FROM rental.cars AS c WHERE id NOT IN ( SELECT c.id FROM rental.cars AS c JOIN rental.reservations AS r ON c.id = r.auto WHERE done = 1 AND ( (('$from' >= r.`od` AND '$from' <= r.`do`) OR ('$to' >= r.`od` AND '$to' <= r.`do`)) OR ((r.`od` >= '$from' AND r.`od` <= '$to') OR (r.`do` >= '$from' AND r.`do` <= '$to')) ) ) zdá sa mi byť príliš komplikovaný nedá sa nejako zjednodušiť? mám pocit že určite existuje jednoduchšie riešenie ale už ma nič nenapadá... |
||
123456789 Profil * |
#2 · Zasláno: 20. 4. 2010, 07:59:35
Pokud chci vybrat jen auta, která mají rezervaci mimo zadané datum, tak by měl stačit tento dotaz:
SELECT [nejake atributy z cars],reservation.od,reservation.do FROM cars,reservation WHERE reservation.auto=cars.id AND (reservation.do < [spodni hranice data] OR reservation.od > [horni hranice data])` |
||
Kajman_ Profil * |
#3 · Zasláno: 20. 4. 2010, 08:28:50
SELECT c.* FROM rental.cars AS c LEFT JOIN rental.reservations AS r ON c.id = r.auto AND r.done = 1 AND '$to' >= r.od AND '$from' <= r.do WHERE r.auto is null |
||
Časová prodleva: 14 let
|
0