powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сортировка с использованием SUBSTRING_INDEX
7 сообщений из 32, страница 2 из 2
Сортировка с использованием SUBSTRING_INDEX
    #39087266
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

я сам просто наскакивал, непотестив, ожидаешь "пусто", а оказывается "ВсяСтрока"
...
Рейтинг: 0 / 0
Сортировка с использованием SUBSTRING_INDEX
    #39087295
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov , ну просто когда
Код: sql
1.
2.
CASE ...
     WHEN locate('k', `num`) THEN SUBSTRING_INDEX(`num`,'k',-1)


то при всём желании "вся строка" не светит...
...
Рейтинг: 0 / 0
Сортировка с использованием SUBSTRING_INDEX
    #39087316
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
здесь
Обрезать строку с конца накидал ф-ю, а потом увидел что есть нюансы
...
Рейтинг: 0 / 0
Сортировка с использованием SUBSTRING_INDEX
    #39087329
vedroide2e4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавил case
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
mysql> select * from test
    -> order by
    -> num+0,
    -> case
        -> when num = cast(num+0 as char) then 1
        -> when locate('k', num) then 2
        -> when locate('/', num) then 4
        -> else 3 end ,
    ->case
        -> when locate('k', num) then (SUBSTRING_INDEX(num,'k' -1)+0)
	-> when locate('/', num) then (SUBSTRING_INDEX(num,'/' -1) 
        -> else num end
    -> ;


Не сортирует номера корпусов после разделительного символа,

заменил второй case на
Код: plsql
1.
(SUBSTRING_INDEX(num,'k' -1)+0)

работает
...
Рейтинг: 0 / 0
Сортировка с использованием SUBSTRING_INDEX
    #39087330
vedroide2e4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vedroide2e4
Код: plsql
1.
(SUBSTRING_INDEX(num,'k' -1)+0)

работает
после 'k' или '/' запятую пропустил в сообщении
...
Рейтинг: 0 / 0
Сортировка с использованием SUBSTRING_INDEX
    #39087827
vedroide2e4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как же добиться работы второго case и сортировки после обоих разделителей?
Код: plsql
1.
2.
3.
4.
case
        -> when locate('k', num) then (SUBSTRING_INDEX(num,'k', -1)+0)
	-> when locate('/', num) then (SUBSTRING_INDEX(num,'/', -1) 
        -> else num end
...
Рейтинг: 0 / 0
Сортировка с использованием SUBSTRING_INDEX
    #39088019
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select *
    , case when m = '' then 1 when m = 'k' then 2 when m = '/' then 4 else 3 end b
    , (substr(tit, -pos) + 0) c
    from (select tit
        , tit + 0 a
        , substr(tit, - (char_length(tit) - char_length(tit + 0)), 1) m
        , (char_length(tit) - char_length(tit + 0) - 1) pos
        from t) x
order by a, b, c



в наших реальных проектах мы подобными извратами не занимаемся, а создаем дополнительное поле, в котором хранятся инты, содержащие внутри себя логику сортировки, а эти числа мы собираем на клиенте

апдейтить при сохранении каждой записи или апдейтить массово по всей базе с определенной периодичностью - это уже зависит от ситуации, но каждый раз вычислять сортировку - это глупо, особенно если таких селектов дохрена и юзаются они постоянно
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сортировка с использованием SUBSTRING_INDEX
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]