Autor Zpráva
DJDaca
Profil *
Ahoj,

Píšu tabulku pro služby a tabulka by měla zobrazit služby platné pro určité období, takže jak to bývá - služba někdy začíná a někdy končí - nebo ještě neni specifikováno že končí ( NULL )

Napsal jsem tedy dotaz velmi podobný tomuto:
SELECT `id`, `name`, `date_start`, `date_expire` FROM `service` WHERE
(`date_start` >= '2016-04-01' AND `date_expire` <= '2016-04-30') OR
(`date_start` <= '2016-04-01' AND `date_expire` >= '2016-04-30') OR
(`date_start` >= '2016-04-01' AND `date_expire` >= '2016-04-30') OR
(`date_start` <= '2016-04-01' AND `date_expire` <= '2016-04-30') OR
(`date_start` >= '2016-04-30' AND `date_expire` IS NULL)


Tedy - najdi všechno co začalo v dubnu a skončilo v dubnu
nebo všechno co začalo někdy před dubnem a končí za dubnem
nebo všechno co začalo v dubnu a skončilo za dubnem
nebo všechno co začalo před dubnem a skončilo v dubnu
nebo všechno co začalo před dubnem včetně dubna celého a ještě neni určeno kdy to má skončit :))

Uff no a takto vytvořený dotaz mi přijde až zbytečně komplikovaný, nenapadá někoho nějaké lepší řešení ?
Děkuju ! :)
TomášK
Profil
Jednodušší je uvědomit si, které záznamy nechceš - ty, které začaly po konci dubna nebo ty, které skončily před začátkem dubna. Pokud je vyloučíš, zbudou dubnové služby.
SELECT `id`, `name`, `date_start`, `date_expire` FROM `service` WHERE
(`date_start` <= '2016-04-30') AND
(`date_expired` >= '2016-04-01' OR `date_expired` IS NULL)
juriad
Profil
Nechceme záznamy, které mají vyplněný date_expired a ten je před dubnem, a nechceme záznamy, které začínají po konci dubna.
NOT (date_expired IS NOT NULL AND date_expire < '2016-04-01') AND NOT (date_start > '2016-04-30')

Pak stačí odpropagovat NOT a vyjde to podmínka od TomášeK.
DJDaca
Profil *
Díky moc :)

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: