在我的页面中,我根据用户选择联系的selectedTime的范围显示一些条目,并将其保存到mySQL中。
我有4个时间段范围(我们的工作时间09:00-17:00),用户可以从中选择
09:00-11:00
11:00-13:00
13:00-15:00
15:00-17:00
现在,我显示结果如下,按selectedTime排序
$sql = "SELECT * FROM table order by chosenTime asc";
我要做的是根据当前时间对结果进行排序。
例如,如果时间是10:30,请首先显示所选时间在09:00-11:00之间的行。
如果是11:00,请首先显示11:00-13:00的结果。
我正在考虑
between
,但是我不知道如何进行此操作。任何帮助表示赞赏
最佳答案
假设chosenTime
是字符类型,采用固定且规范的格式,这一点都不困难。
我们需要采用hh:mm
格式(例如10:30)的当前时间来匹配存储的格式。
如果我们想以这种格式从数据库中获取当前时间,那是一个简单的表达式:
DATE_FORMAT(NOW(),'%h:%i')
丑陋的部分将分割字符串。给定固定格式
hh:mm-hh:mm
,我们可以使用简单的SUBSTR函数:SUBSTR(ct,1,5) -- begin
SUBSTR(ct,7,5) -- end
您可以肯定使用BETWEEN比较器,但是请注意,在边界上,当当前时间处于边缘时(例如13:00),我们在
11:00-13:00
和13:00-15:00
周期上都会得到“匹配” 。 ORDER
BY DATE_FORMAT(NOW(),'%h:%i') BETWEEN SUBSTR(ct,1,5) AND SUBSTR(ct,7,5) DESC
, ct
, ...
请注意,第一个表达式被评估为布尔值,并且将返回
1
(true),0
(false)或NULL
(unknown)。我们添加DESC
关键字,以便将真实条件(返回值为1)排在false之前。这不是我们用于处理时间值的正常模式,但是它将以固定且规范的格式适用于selectedTime。 (这适用于24小时制,但不适用于12小时制或一位数小时等。也就是说,要使其正常工作,我们必须确保字符串比较等于时间比较。)
关于php - 要根据当前时间和用户选择的时间来排序mySQL结果?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23256713/