您好我有一个MySQL数据库,我正在为研究日历设置一个表,字段如下:
SELECT
studycalendarpk,
studytopic,
`module`,
startdate,
enddate,
syllabusoutline
FROM studycalendar
我要做的是创建一个查询,以便对于仪表板php页面,它有一个查询,用于显示当前的周学习计划。有人可以告诉我如何设置查询来过滤它,以便在当前日期介于startdate和enddate之间时选择它,谢谢
答案 0 :(得分:3)
您的表格中的每一行都有startdate
和enddate
,如果我理解您的要求,您希望显示符合这些条件的所有行。
WHERE enddate >= start of week
AND startdate < start of next week
您的表格中已有startdate
和enddate
。这个答案假设每行的enddate被约束为大于或等于starttdate。如果不是,你会得到奇怪的结果。
您需要一个MySQL表达式来计算本周的第一天。这是你如何做到的。
FROM_DAYS(TO_DAYS(CURDATE()) -MOD(TO_DAYS(CURDATE()) -1, 7))
此表达式产生紧接CURDATE()
之前的星期日。如果您的周被认为是星期一开始,请改用它(请注意-2
)。
FROM_DAYS(TO_DAYS(CURDATE()) -MOD(TO_DAYS(CURDATE()) -2, 7))
这些是非常有用的表达式,因为它们产生实际日期。然后可以通过日期算法(例如somedate + INTERVAL 7 DAY
)操纵这些日期,这样可以方便地在一周后给出日期。这种算法甚至适用于一个日历年的最后一周和第一周。
总而言之,您可以选择所需的记录。
WHERE enddate >= FROM_DAYS(TO_DAYS(CURDATE())-MOD(TO_DAYS(CURDATE())-1,7))
AND startdate < FROM_DAYS(TO_DAYS(CURDATE())-MOD(TO_DAYS(CURDATE())-1,7))
+ INTERVAL 7 DAY
这将从您的表中获取与当前周相关的记录。
答案 1 :(得分:2)
SELECT *
FROM studycalendar
where curdate() between startdate and enddate
答案 2 :(得分:0)
SELECT
`studycalendarpk`,
`studytopic`,
`module`,
`startdate`,
`enddate`,
CAST(week(now()) AS UNSIGNED)
syllabusoutline
FROM studycalendar WHERE CAST(week(now()) AS UNSIGNED) between CAST(week('2014-09-01') AS UNSIGNED) and CAST(week('2014-09-07') AS UNSIGNED)