MYSQL - SQL date intervals query
العربية
български
català
中文
čeština
dansk
Nederlands
eesti
suomi
français
Deutsch
Ελληνικά
עברית
हिंदी
magyar
Bahasa Indonesia
italiano
日本語
한국어
latviešu
lietuvių
norsk
polski
Português
română
русский
slovenčina
slovenski
español
svenska
ไทย
Türkçe
українська
Tiếng Việt
I am managing an event database. Every event has a start and end timestamp (INT, unix timestamp).
Currently i'm able to do the following things with a single SQL query:
- build up a calendar, and mark days when an event occurring
- list occurring events on a given date (YYYY/MM/DD, YYYY/MM)
The problem is when an event spans several days i can't list it on a date between it's start and end timestamps.
For example:
Event starts on 2011/05/25 and ends on 2011/05/27 i can't list it on the page 2011/05/26.
My actual SQL query is
SELECT * FROM `event`
WHERE (`start` BETWEEN ? AND ?) OR (`end` BETWEEN ? AND ?)
ORDER BY start ASC
The two bound parameters (unix timestamps) are automatically calculated depending on what kind of parameter given (a whole month, or a specific day)
Is it possible to get these events (that spans several days) on a day between it's two endpoints extending my query above?
Please let me know if i can clarify my question.
Update
Example:
event start: 1309125660 (2011-06-27 00:01:00)
end end: 1314050340 (2011-08-22 23:59:59)
select start: 1312408860 (2011-08-04 00:01:00)
select end: 1312495199 (2011-08-04 23:59:59)
This event won't appear when i trying to list events occurring 2011/08/4
Answer |
If I get the question right, with [:start, :end] being your date range of interest, you're looking for:
select *
from event
where -- event started earlier, ends later
start <= :start and :start <= end
or -- event starts during [:start, :end]
:start <= start and start <= :end
or -- event ends during [:start, :end]
:start <= end and end <= :end;
If you're looking for a particular :day, use :day as :start and :day + 1 day as :end.