Forum Webscript.Ru
Общие => Базы данных => Тема начата: xRUSha от 17 Мая 2003, 11:50:23
-
У меня в базе есть поле (name), в котором записано 2 слова - имя и фамилия (структуру таблиц писал не я). Так вот, мне нужно сделать сортировку по алфовиту, но чтобы сортировались не по имени (order by name) второму слову - т.е. фамилии. Возмжно ли замутить такую сортировку?
-
Возможно, просто загони это все в масив (PHP) потом отреж все что стоит до пробела "%20" и его самого и сортируй как хочешь :))
-
Ну, если этот твой name разделён пробелом, то определяешь позицию пробела:
LOCATE(\' \',name)
потом используешь
SUBSTRING (name, LOCATE(\' \',name)+1)
потом делаешь сортировку
ORDER BY SUBSTRING (name, LOCATE(\' \',name)+1)
за правильность не ручаюсь, попробуй-поиграйся....
НО. ИМХО. ЭТО ИЗВРАТ!............... :)
-
nobody
загони это все в масив
массивом не хочу, т.к. записей довольно много должно получатся, а нужно, чтоб сразу из базы нужные доставались.
FILA
ORDER BY SUBSTRING (name, LOCATE(\' \',name)+1)
во, это похоже то что нужно, попробую
-
ORDER BY SUBSTRING (name, LOCATE(\' \',name)+1)
хм, насколько я помню мускуль не поддерживает индекс по результату выполнения функции поэтому тормозить будет.
Добавь 2 поля и скрипт напиши который в одно запишет имя, во второе фамилию
-
Макс
Добавь 2 поля и скрипт напиши который в одно запишет имя, во второе фамилию
Это самое правильное решение проблемы, но и самое трудоемкое. Если делать такую фишку, то придется скипты редактиравиния править и бог знает что еще.
а ORDER BY SUBSTRING (name, LOCATE(\' \',name)) (тока без +1) оказался весьма рабочим (хотя наверное и тормозным =(()
-
xRUSha
а ты ещё и хотел, чтоб он не тормозил( хотя смотря что считать тормозами - был почти аналогичный случай, почти что и не тормозил)
при такой то организации таблицы и требуемой сортировке.....
Макс
это конечно самое правильное решение.... но xRUSha просил сортировку, её и получил ))
nobody
куча данных от мускуля, то же в php - массиве плюс порезка и обработка - те же тормоза......... ИМХО
:)
-
НО. ИМХО. ЭТО ИЗВРАТ!...............
я ж предупреждал :)
-
FILA
Работает, и на том спасибо. Я тоже особых тормозов не заметил
-
xRUSha
В дагонку еще вопрос, как теперь вычленить имя - первую часть строки до пробела
аналогично сортировке - создаёшь в таблице два поля : first_name и last_name
а потом делаешь update и ложишь в first_name name до пробела а в last_name - name после пробела
-
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))