Forum Webscript.Ru

Общие => Базы данных => Тема начата: xRUSha от 17 Мая 2003, 11:50:23

Название: Глючная сортировка
Отправлено: xRUSha от 17 Мая 2003, 11:50:23
У меня в базе есть поле (name), в котором записано 2 слова - имя и фамилия (структуру таблиц писал не я). Так вот, мне нужно сделать сортировку по алфовиту, но чтобы сортировались не  по имени (order by name) второму слову - т.е. фамилии. Возмжно ли замутить такую сортировку?
Название: Глючная сортировка
Отправлено: nobody от 19 Мая 2003, 16:04:55
Возможно, просто загони это все в масив (PHP) потом отреж все что стоит до пробела "%20" и его самого и сортируй как хочешь :))
Название: Глючная сортировка
Отправлено: FILA от 19 Мая 2003, 16:29:04
Ну, если этот твой name разделён пробелом, то определяешь позицию пробела:

LOCATE(\' \',name)

потом используешь

SUBSTRING (name, LOCATE(\' \',name)+1)

потом делаешь сортировку

ORDER BY SUBSTRING (name, LOCATE(\' \',name)+1)

за правильность не ручаюсь, попробуй-поиграйся....

НО. ИМХО. ЭТО ИЗВРАТ!............... :)
Название: Глючная сортировка
Отправлено: xRUSha от 20 Мая 2003, 14:11:20
nobody
Цитировать
загони это все в масив

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

FILA
Цитировать
ORDER BY SUBSTRING (name, LOCATE(\' \',name)+1)

во, это похоже то что нужно, попробую
Название: Глючная сортировка
Отправлено: Макс от 20 Мая 2003, 18:45:44
Цитировать
ORDER BY SUBSTRING (name, LOCATE(\' \',name)+1)
хм, насколько я помню мускуль не поддерживает индекс по результату выполнения функции поэтому тормозить будет.
Добавь 2 поля и скрипт напиши который в одно запишет имя, во второе фамилию
Название: Глючная сортировка
Отправлено: xRUSha от 20 Мая 2003, 19:27:25
Макс
Цитировать
Добавь 2 поля и скрипт напиши который в одно запишет имя, во второе фамилию

Это самое правильное решение проблемы, но и самое трудоемкое. Если делать такую фишку, то придется скипты редактиравиния править и бог знает что еще.
а ORDER BY SUBSTRING (name, LOCATE(\' \',name)) (тока без +1) оказался весьма рабочим (хотя наверное и тормозным =(()
Название: Глючная сортировка
Отправлено: FILA от 20 Мая 2003, 20:19:30
xRUSha
а ты ещё и хотел, чтоб он не тормозил( хотя смотря что считать тормозами - был почти аналогичный случай, почти что и не тормозил)
при такой то организации таблицы и требуемой сортировке.....
Макс
это конечно самое правильное решение.... но xRUSha просил сортировку, её и получил ))
nobody
куча данных от мускуля, то же в php - массиве плюс порезка и обработка - те же тормоза......... ИМХО

:)
Название: Глючная сортировка
Отправлено: FILA от 20 Мая 2003, 20:21:13
Цитировать
НО. ИМХО. ЭТО ИЗВРАТ!...............

я ж предупреждал :)
Название: Глючная сортировка
Отправлено: xRUSha от 21 Мая 2003, 09:21:40
FILA
Работает, и на том спасибо. Я тоже особых тормозов не заметил
Название: Глючная сортировка
Отправлено: FILA от 21 Мая 2003, 12:52:05
xRUSha
Цитировать
В дагонку еще вопрос, как теперь вычленить имя - первую часть строки до пробела

аналогично сортировке - создаёшь в таблице два поля : first_name и last_name
а потом делаешь update и ложишь в  first_name name до пробела а в last_name - name после пробела
Название: Глючная сортировка
Отправлено: xRUSha от 21 Мая 2003, 18:32:05
FILA
Этот вопрос прожил минут 5 от силы. Я быстро понял, что тупанул, и отредактировал сообщение. Как быстро отвечаешь, прям тока подумать и успеваю.

Трогать структуру таблицы я не стал, т.к. свалится все остальное, а рез-й запрос получился такой:

SELECT   id_e, name,
   SUBSTRING(name, LOCATE(\' \',name)) as lname,
   SUBSTRING(name, 1, LOCATE(\' \',name)) as fname
FROM editor
WHERE (let = \'$p\') and (visible = \'true\')
ORDER BY SUBSTRING(name, LOCATE(\' \',name))