我希望能够计算出某个范围是否在一个范围内并返回所有结果。
我们有一张表已安排每周活动。表格的每一行都有唯一的ID,日期编号和小时编号。
id (auto int) | dayNumber (int from 0 to 6) | hourNumber (int from 0 to 23)
根据此表,我们可以确定何时应该在计划中发生事件。例如,dayNumber = 2和hourNumber = 3的条目意味着事件安排在星期二凌晨3点。
我发现困难的部分是我需要运行查询来获取一系列预定事件。所以我将传递最小dayNumber和hourNumber以及最大dayNumber和hourNumber。我的预期结果将是该范围内的每个匹配条目。
更简单的情况是最小值小于最大值。例如(在PHP中),
$minimumDayNumber = 1; $minimumHourNumber = 3;
$maximumDayNumber = 5; $maximumHourNumber = 6;
当我想要搜索周六到周二的范围时,它变得更复杂。为此,变量看起来像这样: $ minimumDayNumber = 6; $ minimumHourNumber = 3; $ maximumDayNumber = 2; $ maximumHourNumber = 6;
使用这些输入,我需要查询数据库并查找该范围内的所有条目。必须有一个好的算法来构造查询或一个好的查询来直接做到这一点。
这在纸上看起来很简单,我已经用日期范围(实际日期字段)完成了,但我无法让它正常工作。提前感谢您的帮助,如果您需要进一步说明,请与我们联系。
答案 0 :(得分:1)
试试这个
where (($maximumDayNumber > $minimumDayNumber and (dayNumber+hourNumber/24) >= ($minimumDayNumber+$minimumHourNumber/24) and (dayNumber+hourNumber/24) <= ($maximumDayNumber+$maximumHourNumber/24))
or ($maximumDayNumber < $minimumDayNumber and ((dayNumber+hourNumber/24) <= ($minimumDayNumber+$minimumHourNumber/24) OR (dayNumber+hourNumber/24) >= ($maximumDayNumber+$maximumHourNumber/24))))
答案 1 :(得分:1)
这会有用吗?
SELECT * FROM activities
WHERE IF( $minDayNum = $maxDayNum,
( dayNumber = $minDayNum AND hourNumber >= $minHourNum AND hourNumber <= $maxHourNum ),
(
IF( $minDayNum > $maxDayNum,
( dayNumber > $minDayNum AND dayNumber < $maxDayNum ),
( dayNumber > $minDayNum OR dayNumber < $maxDayNum )
)
OR ( dayNumber = $minDayNum AND hourNumber >= $minHourNum )
OR ( dayNumber = $maxDayNum AND hourNumber <= $maxHourNum )
)
)
原谅橡皮鸭:
我没有嘲笑任何东西,让我知道它是如何运作的。