在我的页面中,我根据用户选择联系的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:0013: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/

10-12 12:46
查看更多