Заказ MySQL по алфавиту не работает - PullRequest
0 голосов
/ 26 апреля 2018

Вот случай, я использую запрос MySQL, как это

SELECT 
    *
FROM
    tbl_name
WHERE
    id = 1
ORDER BY LENGTH(title), title;

но когда есть названия вроде

Детектив Конан, Эпизод 797.5, английская суббарада

Детектив Конан, Эпизод 829.2, английская подстилка

Становится

Детектив Конан Эпизод 897 Английское Подстолье

Детектив Конан, Эпизод 898, английское подразделение

Детектив Конан, Эпизод 797.5, английское подразделение

Детектив Конан Эпизод 829.2 Английская Саббед

Правильный должен быть такой

Детектив Конан Эпизод 797.5 Английская Саббед

Детектив Конан Эпизод 829.2 Английская Саббед

Детектив Конан Эпизод 897 Английское Подстолье

Детектив Конан Эпизод 898 Английское Саббед

Возможно ли в запросе MySQL сортировать как то, что я хочу? или я должен изменить структуру таблицы и разделить номер эпизода в новом столбце.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

@ Aurelien его работа становится нисходящей, если я использую:

SELECT 
    *
FROM
    tbl_name
WHERE
    id = 1
ORDER BY LENGTH(title) DESC, title DESC

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

Check this

0 голосов
/ 26 апреля 2018

Я неправильно понял ваш первоначальный запрос. Попробуйте это:

SELECT 
    *
FROM
    tbl_name
WHERE
ORDER BY CAST(title AS UNSIGNED), title;

Проверьте пример скрипки здесь: http://sqlfiddle.com/#!9/755b97/2

Редактировать: Кажется, что это работает, только когда цифры находятся на передней панели.

Это, кажется, единственное рабочее решение для вашей проблемы, но за счет большой нагрузки: Естественная сортировка в MySQL

Другим решением было бы переключиться на mysql 8.0, который вводит regexp_replace, позволяя вам извлечь числа из вашей строки, а затем ORDER BY CAST (the_result_of_your_regexp). Хотя все равно будет тяжелым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...