Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql/php按varchar的第二个字排序_Php_Mysql_Sql_Word - Fatal编程技术网

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

Mysql/php按varchar的第二个字排序,php,mysql,sql,word,Php,Mysql,Sql,Word,我有一个名为VARCHARname和姓为firstname的人,例如:mysql数据库中的John Snow。我想按姓氏字母顺序排序 我可以在SQL请求中添加类似“按第二个单词排序”的内容吗 谢谢你当然可以。一种方法是: order by substring_index(name, ' ', -1) 请注意,这可能不适用于后缀。它也可能不适用于中间名。另一方面,标题可能会偏离精确的第二个单词匹配,但这将适用于这些词。如果保证名字和姓氏之间只有一个空格,则可以执行以下操作 select [fu

我有一个名为VARCHARname和姓为firstname的人,例如:mysql数据库中的John Snow。我想按姓氏字母顺序排序

我可以在SQL请求中添加类似“按第二个单词排序”的内容吗


谢谢你

当然可以。一种方法是:

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

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

如果保证名字和姓氏之间只有一个空格,则可以执行以下操作

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

填写正确的表格和列名。

正如其他人已经提到的,您可以使用substring\u index函数使用第一个空格后的部分对结果进行排序

在本例中,按第二个单词排序将转换为按子字符串_indexname,,-1排序

但我不会这么做,因为:

这是不可靠的,因为在现实生活中,您不能保证数据集中的所有名称都遵循FIRST_NAMELAST_NAME格式。 根据数据集的大小,速度可能会非常慢。
如果您可以更改数据库的模式,最好为名字和姓氏以及可能的中间名设置两个单独的列。这将处理1,因为您将保证订购时使用姓氏,而不是中间名。要解决2,您始终可以在姓氏列上创建B树索引以加快排序。

问题特别要求按第二个单词排序。有些答案按最后一个词排序,而不是第二个词。要按字段全名的第二个字排序,请使用下面的

ORDER BY SUBSTRING_INDEX(SUBSTRING_INDEX(fullname, ' ', 2), ' ', -1)
SUBSTRING_INDEX( SUBSTRING_INDEX( VALUES, DELIM, N ), DELIM, -1 )
更一般地说,要从包含由分隔符DELIM分隔的值的字符串值中选择第N个值,请使用下面的

ORDER BY SUBSTRING_INDEX(SUBSTRING_INDEX(fullname, ' ', 2), ' ', -1)
SUBSTRING_INDEX( SUBSTRING_INDEX( VALUES, DELIM, N ), DELIM, -1 )

有关更多信息,请参阅

关于亚瑟·C·克拉克、安娜·达席尔瓦或奥斯卡·德拉霍亚的人的情况如何?否。首先创建两个字段;苏尔;按sur字段排序。