Заказ 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

но все равно что-то не так, если заголовок как на картинке

Проверь это

Другие вопросы по тегам