Mysql / php сортировка по второму слову varchar

0

У меня есть один VARCHAR (имя с именем и фамилией, например: John Snow) в базе данных mysql. Я хочу сортировать по фамилии (в алфавитном порядке).

Могу ли я добавить что-то вроде "ORDER BY SECOND WORD" к запросу SQL?

Спасибо

  • 0
    А как насчет кого-то по имени «Артур Кларк», «Анна да Силва» или «Оскар де ла Хойя»?
  • 0
    Нет. Сначала создайте два поля; сюр; сортировать по сюрполю
Теги:
word

3 ответа

1

Конечно. Один из методов:

order by substring_index(name, ' ', -1)

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

  • 0
    Спасибо, это работает :)
0

Как уже упоминалось, вы можете использовать функцию substring_index для упорядочивания результатов с помощью части после первого пробела.

В вашем случае ORDER BY SECOND WORD переведет ORDER BY substring_index(name, ' ', -1)

Но я бы этого не делал, потому что:

  1. Он не является надежным, поскольку в реальной жизни вы не можете гарантировать, что все имена в вашем наборе данных будут соответствовать формату FIRST_NAME<space>LAST_NAME.
  2. Это может быть довольно медленным в зависимости от размера вашего набора данных.

Если вы можете изменить схему базы данных, предпочтительнее иметь два отдельных столбца для имени и фамилии (и, возможно, среднего имени). Это будет иметь дело с №1, так как вам гарантировано, что заказ будет выполнен по имени, а не по среднему имени. Чтобы решить задачу №2, вы всегда можете создать индекс B-дерева в столбце имен, чтобы ускорить заказ.

0

Если вам гарантировано одно место между именем и фамилией, вы можете сделать что-то вроде

select 
[fullname]
, SUBSTRING_INDEX(fullname, ' ', 1) as [firstname]
, SUBSTRING_INDEX(fullname, ' ', -1) as [lastname]
from <table>
order by [lastname]

Заполните правильные имена таблиц и столбцов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню