Mysql / php按varchar的第二个字排序

问题描述 投票:0回答:3

我在mysql数据库中有一个VARCHAR(名字,姓氏和姓氏,例如:John Snow)。我想按姓氏排序(按字母顺序排列)。

我可以在SQL请求中添加“ORDER BY SECOND WORD”之类的内容吗?

谢谢

php mysql sql word
3个回答
1
投票

当然。一种方法是:

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

请注意,这可能不适用于后缀。它也可能不适用于中间名。另一方面,标题可能会剔除确切的第二个单词匹配,但这将适用于那些。


0
投票

如果保证在firstname和lastname之间有一个空格,你可以做类似的事情

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

填写正确的表和列名称。


0
投票

正如其他人已经提到的那样,您可以使用substring_index函数在第一个空格后使用零件对结果进行排序。

在你的情况下,ORDER BY SECOND WORD将转换为ORDER BY substring_index(name, ' ', -1)

但我不这样做是因为:

  1. 它不可靠,因为在现实生活中,您无法保证数据集中的所有名称都遵循FIRST_NAME<space>LAST_NAME格式。
  2. 根据您的数据集大小,它可能会非常慢。

如果你可以改变数据库的模式,最好有两个单独的列,用于名字和姓氏(可能是中间名)。这将处理#1,因为您将保证对姓氏而不是中间名进行排序。要解决#2,您始终可以在姓氏列上创建B树索引以加快排序速度。

© www.soinside.com 2019 - 2024. All rights reserved.