Результат MySQL ORDER BY дата и время

У меня такой запрос

"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"; 

и где пункт

 $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 Я получаю такой результат

вышел из строя

контрольная строка 63 и 64 в приведенном выше снимке результат сортируется по date но не по time также по первому результату, показанному из таблицы supplier до строки 63 а затем от 64 до начала booking таблицы, это похоже на то, что результат сортируется по каждому столу (таблица первого supplier а затем таблицу booking ), а затем отсортированы по date и time .

И если поиск в течение 24 часов с помощью ORDER BY dep_time ASC я получаю правильный результат, правильно отсортированный по времени.

Сценарий два

Если поиск в течение 48 часов и более с помощью только ORDER BY dep_time ASC я получаю результат, как следует

Не в порядке 2

Не отсортировано по дате выключения, оно сортировалось только по time , поэтому оно бесполезно.

И если поиск в течение 48 часов или более с ORDER BY dep_date ASC, dep_time ASC я получаю тот же результат, что и первый снимок;

  • Первый результат сортируется supplier таблицы, а затем booking но в первые 24 часа, а затем следующие 24 часа
  • Затем в течение каждых 24 часов каждый результат таблицы сортируется по date и time отдельно.

Итак, как я могу сортировать результат обеих таблиц по date и time независимо от того, каков будет диапазон дат?

Использовать Concat

 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 

Вы можете просто order by supplier.departure_date_time поскольку это уже в правильном порядке.

ОК, извините. Я просто прочитал Справочное руководство по синтаксису UNION .

Чтобы использовать предложение ORDER BY или LIMIT для сортировки или ограничения всего результата UNION, скопируйте отдельные инструкции SELECT и поместите ORDER BY или LIMIT после последнего.

 " ( 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 ";