I was starting to do a query such as:
SELECT * FROM mytable WHERE (weekofyear(now())+1) <= date_inserted < weekofyear(now()+2)
The problem with this is that items from previous years will also show up here. What would be the best way to do this query — I’m hoping I can still use an index on the query on the date_inserted field, which is why I’m asking this here
Advertisement
Answer
I would phrase this as:
where
date_inserted >= current_date + interval 7 - weekday(current_date) day
and date_inserted < current_date + interval 14 - weekday(current_date) day
Expression current_date + interval 7 - weekday(current_date) day gives you the first day of next week. This works under the assumptions that your weeks start on Monday.
You can see that no date function is applied on the date_inserted column, which mean that MySQL would happily use an index on that column for filtering, if any.