根据当前时间和用户选择的时间订购mySQL结果?

时间:2014-04-23 22:56:06

标签: php mysql

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

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

09:00-11:00
11:00-13:00
13:00-15:00
15:00-17:00

现在,我按以下方式显示结果,按所选时间

排序
$sql = "SELECT * FROM table order by chosenTime asc";

我想要做的是根据当前时间对结果进行排序。

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

我正在考虑between,但我不知道如何继续这样做。

感谢任何帮助

2 个答案:

答案 0 :(得分:0)

我想到的第一种方法是制作子表,其中时间是否在值之间。像

这样的东西
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

这应该为您提供结果,结果与您当前工作时间的STARTTIME和ENDTIME相关。

答案 1 :(得分:0)

假设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

请注意,第一个表达式被计算为布尔值,并将返回0(true),NULL(false)或DESC(未知)。我们添加{{1}}关键字,以便在false之前对真实条件(作为值1返回)进行排序。


这不是我们用于处理时间值的正常模式,但这将适用于固定和规范格式的selectedTime。 (这适用于24小时制,但不能用12小时制或单位数小时等工作。也就是说,为了实现这一点,我们必须保证字符串比较等同于时间比较)。