Autor | Zpráva | ||
---|---|---|---|
DJDaca Profil * |
#1 · Zasláno: 10. 5. 2016, 18:41:09
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 |
#2 · Zasláno: 10. 5. 2016, 18:53:24
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 * |
#4 · Zasláno: 11. 5. 2016, 10:21:57
Díky moc :)
|
||
Časová prodleva: 9 let
|
0