Он сортирует их как строки, потому что вы преобразовали даты в строки, используя DATE_FORMAT
(обратите внимание, что в качестве строки «15 февраля ...» меньше, чем «9 февраля ...», потому что 1 предшествует 9 валфавит").Решение заключается в сортировке по реальной дате в date_mod
.Вы можете сделать это напрямую, просто добавив date_mod
к выбору и изменив порядок, например:
SELECT id, date, date_mod, type
FROM (
SELECT resume_id AS id,
DATE_FORMAT(date_mod, '%M %e, %Y') AS date,
date_mod,
'resume' AS type
FROM resumes
WHERE user_id = '$user_id'
UNION ALL
SELECT profile_id AS id,
DATE_FORMAT(date_mod, '%M %e, %Y') AS date,
date_mod,
'profile' AS type
FROM profiles
WHERE user_id = '$user_id'
ORDER BY date_mod DESC
LIMIT 5
) AS d1
ORDER BY date_mod
Но еще лучше упростить его, выбрав only date_mod
в подзапросе (т.е. без форматированной версии) и выполнение последнего DATE_FORMAT
во внешнем запросе:
SELECT id, DATE_FORMAT(date_mod, '%M %e, %Y') AS date, type
FROM (
SELECT resume_id AS id, date_mod, 'resume' AS type
FROM resumes
WHERE user_id = '$user_id'
UNION ALL
SELECT profile_id AS id, date_mod, 'profile' AS type
FROM profiles
WHERE user_id = '$user_id'
ORDER BY date_mod DESC
LIMIT 5
) AS d1
ORDER BY date_mod