Php 根据当前时间和用户选择的时间排序mySQL结果?

Php 根据当前时间和用户选择的时间排序mySQL结果?,php,mysql,Php,Mysql,在我的页面中,我根据用户选择的联系人范围显示了一些条目,并将其保存到mySQL中 我有4组时间(我们的工作时间09:00-17:00),用户可以从中选择 09:00-11:00 11:00-13:00 13:00-15:00 15:00-17:00 现在,我按chosenTime的顺序将结果显示如下 $sql = "SELECT * FROM table order by chosenTime asc"; 我想做的是根据当前时间对结果进行排序 例如,如果时间是10:30,则首先显示所选时间在

在我的页面中,我根据用户选择的联系人范围显示了一些条目,并将其保存到mySQL中

我有4组时间(我们的工作时间09:00-17:00),用户可以从中选择

09:00-11:00
11:00-13:00
13:00-15:00
15:00-17:00
现在,我按chosenTime的顺序将结果显示如下

$sql = "SELECT * FROM table order by chosenTime asc";
我想做的是根据当前时间对结果进行排序

例如,如果时间是10:30,则首先显示所选时间在09:00-11:00之间的行。 如果是11:00,则首先显示11:00-13:00结果

我正在考虑一个介于之间的
,但我不知道如何继续


非常感谢您的帮助

我想到的第一个方法是制作时间在两个值之间或不在两个值之间的子表。差不多

Select *
    FROM 
        (Select *, 1 as priority FROM table where time between STARTTIME and ENDTIME) UNION 
        (Select *, 2 as priority FROM table where time NOT between STARTTIME and ENDTIME) 
ORDER BY priority

这将首先为您提供与当前工作期间的开始时间和结束时间相关的结果

假设
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
您当然可以使用一个Interween comparator,但请注意,在边界上,当当前时间处于边缘(例如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
(未知)。我们添加
DESC
关键字,以便将true条件(返回值为1)排序在false之前



这不是我们用于处理时间值的正常模式,但这将以固定的规范格式适用于chosenTime。(这适用于24小时时钟,但不适用于12小时时钟或一位数小时等。也就是说,要使其起作用,我们必须保证字符串比较相当于时间比较。)

您是否能够将范围存储为两个整数,例如从9开始到11结束。将像“09:00-11:00”这样的字符串与当前时间进行匹配会很痛苦。@TonyHopkinson不,我不能这样做。也许正则表达式有助于清除值,我不确定这是否是您想要做的,但是您可以
orderby
多个字段,例如:
orderbyfield1,field2
糟糕。最好从(当前小时-9)div 2*2+9和当前小时-9 div 2*2+11构建一个字符串XX:00-YY:00,然后可以根据表中的值是否=当前时间范围进行排序。凌乱,非常凌乱。谢谢。你能更详细地描述一下吗?