mysql - Select 所有日期变量都在 STARTDATE 列和 ENDDATE 列之间
mysql - Select all where date variable is between STARTDATE column and ENDDATE column
我有一个表单,用户 select 每月查看该月内的所有记录。数据库记录开始日期和结束日期。
我需要查询开始日期和结束日期之间的所有记录。所以我无法查询 MONTH(Data.startdate) <= $month
因为我需要它介于开始日期和结束日期之间。所以基本上我需要它是:
开始日期 < 月 < 结束日期
因此,如果用户 selects "February",我不仅需要包括开始日期 = 2 的记录,而且我需要 select 所有二月之间的记录开始日期和结束日期。
我想不出 BETWEEN
的方法来解决这个问题,因为我认为这需要列名在前,日期范围是变量。
更新
由于我正在寻找多个月,因此我不得不在一组括号内使用以下答案的组合,中间使用 OR。
供参考的查询:SELECT * FROM Data INNER JOIN Section on Data.section_id = Section.section_id INNER JOIN
类型on Data.type_id = Type.type_id INNER JOIN Company on Data.company_id = Company.company_id INNER JOIN Materials on Data.materials_id = Materials.materials_id INNER JOIN Marked on Data.marked_id = Marked.marked_id WHERE Section.section_id = 1 AND YEAR(Data.data_startdate) = 2015 AND ((MONTH(Data.data_startdate) <= 1 AND MONTH(Data.data_enddate) >= 1) OR (MONTH(Data.data_startdate) <= 2 AND MONTH(Data.data_enddate) >= 2)) ORDER BY Data.data_startdate, Data.section_id, Data.type_id ASC
然而,当我遍历结果时,结果只显示一次,因为它只是一条记录。我如何遍历结果并显示如下所示的内容,而不必多次遍历整个结果数组并对照月份检查每个结果。我要显示:
一月份的所有结果
2 月份的所有结果
现在结果显示为:
1 月开始的所有结果
2 月开始的所有结果
有没有办法将查询分成子数组之类的?
例如,如果我 select 只是 2 月,将显示从 1 月开始的 none 个结果。
WHERE MONTH(Data.startdate) <= $month
AND MONTH(Data.enddate) >= $month
使用
SELECT * FROM mytable WHERE $month BETWEEN MONTH(startDate) AND MONTH(endDate)
我有一个表单,用户 select 每月查看该月内的所有记录。数据库记录开始日期和结束日期。
我需要查询开始日期和结束日期之间的所有记录。所以我无法查询 MONTH(Data.startdate) <= $month
因为我需要它介于开始日期和结束日期之间。所以基本上我需要它是:
开始日期 < 月 < 结束日期
因此,如果用户 selects "February",我不仅需要包括开始日期 = 2 的记录,而且我需要 select 所有二月之间的记录开始日期和结束日期。
我想不出 BETWEEN
的方法来解决这个问题,因为我认为这需要列名在前,日期范围是变量。
更新
由于我正在寻找多个月,因此我不得不在一组括号内使用以下答案的组合,中间使用 OR。
供参考的查询:SELECT * FROM Data INNER JOIN Section on Data.section_id = Section.section_id INNER JOIN
类型on Data.type_id = Type.type_id INNER JOIN Company on Data.company_id = Company.company_id INNER JOIN Materials on Data.materials_id = Materials.materials_id INNER JOIN Marked on Data.marked_id = Marked.marked_id WHERE Section.section_id = 1 AND YEAR(Data.data_startdate) = 2015 AND ((MONTH(Data.data_startdate) <= 1 AND MONTH(Data.data_enddate) >= 1) OR (MONTH(Data.data_startdate) <= 2 AND MONTH(Data.data_enddate) >= 2)) ORDER BY Data.data_startdate, Data.section_id, Data.type_id ASC
然而,当我遍历结果时,结果只显示一次,因为它只是一条记录。我如何遍历结果并显示如下所示的内容,而不必多次遍历整个结果数组并对照月份检查每个结果。我要显示:
一月份的所有结果
2 月份的所有结果
现在结果显示为:
1 月开始的所有结果
2 月开始的所有结果
有没有办法将查询分成子数组之类的?
例如,如果我 select 只是 2 月,将显示从 1 月开始的 none 个结果。
WHERE MONTH(Data.startdate) <= $month
AND MONTH(Data.enddate) >= $month
使用
SELECT * FROM mytable WHERE $month BETWEEN MONTH(startDate) AND MONTH(endDate)