Хорошо, я был немного смущен раньше. Ваш исходный запрос несколько сбивает с толку, так как вы выбираете pub_date
в списке столбцов, а затем конвертацию также в pub_date
. Тем не менее, вы затем сортировали по столбцу pub_date
(фактически, с учетом sortdate as pub_date
) - который выглядит как строковый столбец.
Ваш заказ должен быть в столбце после преобразования в дату, но до преобразования в строку:
SELECT
u.url_id,
url,
title,
description,
pub_date,
STR_TO_DATE(pub_date, '%d-%b-%Y') AS sortdate,
DATE_FORMAT(STR_TO_DATE(pub_date, '%d-%b-%Y'), '%d.%b.%Y') AS formatted_date
FROM
urls AS u,
url_associations AS ua
WHERE
u.url_id = ua.url_id
AND ua.url_category_id=$type
AND ua.approved = 'Y'
ORDER BY
sortdate DESC
Обратите внимание, что я переименовал «отформатированную» версию в formatted_date
. Не ясно, нужно ли вам еще выбирать оригинал pub_date
или нет. Возможно, бит formatted_date
может быть:
DATE_FORMAT(sortdate, '%d.%b.%Y') AS formatted_date
но я не совсем уверен. Я надеюсь, что оптимизатор запросов все равно это выяснит.
Ваш столбец pub_date
действительно должен быть строкой? Почему бы не использовать его в качестве более подходящего типа в базе данных, чтобы избежать всего анализа?