在我的页面中,我根据用户选择联系的选择时间范围显示一些条目,并将其保存到 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:00
和 13: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/