Заказ MySQL по алфавиту не работает
Вот случай, я использую запрос MySQL, как это
SELECT
*
FROM
tbl_name
WHERE
id = 1
ORDER BY LENGTH(title), title;
но когда есть названия, такие как
Детектив Конан Эпизод 797.5 на английском языке
Детектив Конан Эпизод 829.2 на английском языке
Это становится
Детектив Конан Эпизод 897 на английском языке
Детектив Конан Эпизод 898 на английском Subbed
Детектив Конан Эпизод 797.5 на английском языке
Детектив Конан Эпизод 829.2 на английском языке
Правильный должен быть таким
Детектив Конан Эпизод 797.5 на английском языке
Детектив Конан Эпизод 829.2 на английском языке
Детектив Конан Эпизод 897 на английском языке
Детектив Конан Эпизод 898 на английском Subbed
Можно ли в запросе MySQL сортировать, как я хочу? или я должен изменить структуру таблицы и разделить номер эпизода в новом столбце.
Спасибо.
2 ответа
Я неправильно понял ваш первоначальный запрос. Попробуй это:
SELECT
*
FROM
tbl_name
WHERE
ORDER BY CAST(title AS UNSIGNED), title;
Проверьте пример скрипки здесь: http://sqlfiddle.com/
Редактировать: кажется, работает только тогда, когда цифры находятся на передней панели.
Это, кажется, единственное рабочее решение для вашей проблемы, но за счет большой нагрузки: Natural Sort в MySQL
Другим решением было бы переключиться на mysql 8.0, который вводит regexp_replace, позволяя вам извлечь числа из вашей строки, а затем ORDER BY CAST(the_result_of_your_regexp). Все равно будет тяжелым, хотя.
@Aurelien его работа становится нисходящей, если я использую:
SELECT
*
FROM
tbl_name
WHERE
id = 1
ORDER BY LENGTH(title) DESC, title DESC
но все равно что-то не так, если заголовок как на картинке