I have an app that displays ads from campaigns. I limit display of each campaign's set of ads to a specific date range per campaign. My "campaigns" table looks like this:
campaigns
id : integer
start_date : date
end_date : date
I now need to be able to optionally limit the display of campaign ads to a specific time range each day. So now my table looks like
campaigns
id : integer
start_date : date
end_date : date
start_time : time, default: null
end_time : time, default: null
And so my [MySQL] query looks like this:
SELECT
ads.*
FROM
ads
INNER JOIN campaigns ON campaigns.id = ads.campaign_id
WHERE
campaigns.start_date <= "2014-08-05" AND
campaigns.end_date >= "2014-08-05" AND
campaigns.start_time <= "13:30"
campaigns.end_time >= "13:30";
(Dates and times are actually injected using the current date/time.)
This works fine. However, because I store start_time and end_time in UTC time, sometimes end_time is earlier than start_time; for example, in the database:
start_time = 13:00 (08:00 CDT)
end_time = 01:00 (20:00 CDT)
How can I adjust the query (or even use code) to account for this?