У меня такой запрос
"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
я получаю результат, как следует
Не отсортировано по дате выключения, оно сортировалось только по time
, поэтому оно бесполезно.
И если поиск в течение 48 часов или более с ORDER BY dep_date ASC, dep_time ASC
я получаю тот же результат, что и первый снимок;
supplier
таблицы, а затем booking
но в первые 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 ";