php - MySQL 结果 ORDER BY 日期和时间

标签 php mysql sorting

我有这样的查询

"SELECT booking.referance_no AS ref_no,
        booking.entry_date AS dep_date,
        TIME_FORMAT(booking.entry_time,'%H:%i') as dep_time,
        booking.first_name AS fname,
        booking.last_name AS lname,
        booking.mobile AS mobile
    FROM booking WHERE $WHERE1
    GROUP BY booking.book_id
    UNION ALL
SELECT supplier.reference_no AS ref_no,
        DATE_FORMAT(supplier.departure_date_time,'%d-%m-%Y') AS dep_date,
        TIME_FORMAT(supplier.departure_date_time,'%H:%i') AS dep_time,
        supplier.fname AS fname,
        supplier.lname AS lname,
        supplier_subscribers.mobile AS mobile
    FROM supplier WHERE $WHERE2 
    ORDER BY `dep_date` ASC, `dep_time` ASC";

和Where子句

$WHERE1="STR_TO_DATE(booking.entry_date, '%d-%M-%Y') BETWEEN '".$from_date." 00:00:00' AND '".$to_date." 23:59:59'";
$WHERE2="supplier.departure_date_time BETWEEN '".$from_date." 00:00:00' AND '".$to_date." 23:59:59'";

场景一

在 24 小时内搜索时,ORDER BY dep_date ASC, dep_time ASC 我得到这样的结果

out of order

检查上面快照中的第 6364 行,结果按日期排序,但也不按时间排序第一个结果显示从 supplier 表到第 63 行,然后从 64 从表 booking 开始,结果就像结果按每个表排序(首先是 supplier 表,然后是 booking 表),然后按 datetime 排序。

如果在 24 小时内仅使用 ORDER BY dep_time ASC 进行搜索,我会得到按时间正确排序的正确结果。

场景二

如果在 48 小时或更长时间内仅使用 ORDER BY dep_time ASC 进行搜索,我得到的结果如下

Not in-order 2

没有按日期排序,当然它只是按时间排序,所以没用。

如果使用 ORDER BY dep_date ASC, dep_time ASC 在 48 小时或更长时间内进行搜索,我会得到与第一个快照相同的结果;

  • 第一个结果按表供应商排序,然后按预订排序,但前 24 小时,然后是接下来的 24 小时
  • 然后在每 24 小时内,每个表结果分别按日期时间 排序。

那么无论日期范围如何,如何根据日期时间对两个表的结果进行排序?

最佳答案

使用连接

ORDER BY concat(dep_date,' ',dep_time)` ASC

尝试下面的查询,希望它有效

select * from (SELECT booking.referance_no AS ref_no,
        booking.entry_date AS dep_date,
        TIME_FORMAT(booking.entry_time,'%H:%i') as dep_time,
        booking.first_name AS fname,
        booking.last_name AS lname,
        booking.mobile AS mobile
    FROM booking WHERE $WHERE1
    GROUP BY booking.book_id
    UNION ALL
SELECT supplier.reference_no AS ref_no,
        DATE_FORMAT(supplier.departure_date_time,'%d-%m-%Y') AS dep_date,
        TIME_FORMAT(supplier.departure_date_time,'%H:%i') AS dep_time,
        supplier.fname AS fname,
        supplier.lname AS lname,
        supplier_subscribers.mobile AS mobile
    FROM supplier WHERE $WHERE2 ) as temp ORDER BY concat(dep_date,' ',dep_time)` ASC

关于php - MySQL 结果 ORDER BY 日期和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32380953/

相关文章:

php - 必填字段错误检查不起作用

php - PDO 数据库不向数据库中添加项目

PHP - 从 sql 数据库调用的数组不能正确分解,但直接创建的数组可以吗?

MySql:查询多个相同的动态表

php - 从 Codility 中找到给定排列中缺失元素的算法的思考过程

python - 在 Python 3 中对字典列表进行排序

php - AJAX 调用不适用于 PHP

php - 插入阿拉伯语文本 MySQL

php检查当前密码错误

c++ - 使用 const 成员对自定义对象的 vector 进行排序