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

目前,我显示的结果如下,按所选时间排序

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

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

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

我正在考虑之间<​​,但我不知道如何继续。

感谢任何帮助

最佳答案

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

请注意,第一个表达式被计算为 bool 值,并将返回 1 (true)、0 (false) 或 NULL(未知)。我们添加 DESC 关键字,以便将 true 条件(返回值为 1)排在 false 之前。

<小时/>

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

关于php - 根据当前时间和用户选择的时间对 mySQL 结果进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23256713/

相关文章:

php - Symfony2 - 从 Controller 到监听器的变量

mysql - 我可以在我的 mysql 查询中使用条件逻辑吗?

php - 合并多个具有相同结构的 mySQL 数据库

php - 将连接查询更改为 laravel

mysql - java.lang.NullPointerException : Cannot invoke "com.proj.my.repository.OrderRepository.save(Object)" because "this.orderRepository" is null

php - 无鉴别器映射的 Doctrine 单表继承

javascript - 未捕获的类型错误 : info1 is not a function at HTMLInputElement. onkeyup

PHP Remove\from 从数据库中提取的字符串

php - Laravel 嵌套路由模型绑定(bind)

php - #2002 getaddrinfo 失败 - phpmyadmin 使用 docker 容器