Autor Zpráva
blizzboz
Profil
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 *
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 *
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

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0