MySQL Порядок BY, в котором значения сохраняются через ":" в указанном c порядке - PullRequest
0 голосов
/ 03 августа 2020

Я застрял в решении одной проблемы c ЗАКАЗАТЬ. Может быть, кто-то может помочь советом о том, как решить эту проблему, ИЛИ помочь мне, каким образом я должен «копать», чтобы решить эту проблему самостоятельно.

У меня есть таблица «table1» с несколькими столбцами. В этой таблице у меня есть столбец «значение», в котором хранятся такие значения (значение разделяется «:»):

:1::2:
:1::2::3::4::5::6::7::8::9::10::11::12:
:10::11::12:
:11::12:
:2::3:
:2::3::4::5::6::7::8::9::10:
:2::3::4::5::6::7::8::9::10::11:

Я хочу добиться ПОРЯДОК, чтобы учесть числовую последовательность от 1 до 12 . Итак, в этом случае для меня правильный ЗАКАЗ будет:

:1::2:
:2::3:
:2::3::4::5::6::7::8::9::10:
:2::3::4::5::6::7::8::9::10::11:
:1::2::3::4::5::6::7::8::9::10::11::12:
:10::11::12:
:11::12:

1 Ответ

0 голосов
/ 03 августа 2020

Как я понимаю, ваш заказ основан на последнем разделе ваших данных, поэтому вы можете найти желаемый порядок, разделив последний раздел и упорядочив его. Следующее делает ваше желаемое:

Предполагается, что ваши данные сохранены как VARCHAR

SELECT *, SUBSTRING_INDEX(SUBSTRING_INDEX(`value`,'::',-1),':',1) as A FROM `test2` ORDER BY CAST(A AS INT)

Однако, если вы хотите сделать то же самое, что и последний раздел (A) для других разделов, когда последний раздел двух записей равен, повторите этот метод и создайте B, C, et c., для использования в order by.

...