Mysql在列的全名时按姓氏排序

时间:2012-12-17 17:56:34

标签: mysql sql-order-by

我有以下内容:

 SELECT * FROM users LEFT JOIN user_info ON users.id=user_info.user_id 
                WHERE 
                    ((user_info.tester != 1) OR (user_info.tester is null)) AND 
                    id in (SELECT explicituser_id FROM user_login WHERE (created < '2012-12-17' OR created >= date_add('2012-12-17', interval 1 day))) AND 
                    id IN (SELECT participte_id FROM roster WHERE roster_id IN (6)) 
                order by 
                    substring_index(users.name, ' ', -1)

我只是想按用户排序&#39;姓。

然而,虽然它可以按名字排序,但是姓氏是错误的。如果用户的名字周围有引号(即#34; Abigail Martinez&#34;它会使排序不正确。如果用户只提供一个名字,并且它是昵称(即Juan),那么它也会使它不正确。然后是中间的首字母缩写(即Tiffany S Villa或Steve de la Makinov)。不幸的是,这只使用一列作为全名(users.name)。

感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:8)

substring_index(TRIM(users.name), ' ', -1)添加TRIM将删除尾随空格。之后,按预期进行排序。

答案 1 :(得分:0)

如果是这种情况尝试获取所有行,然后可以尝试使用mysql_real_escape_string。所以你不会有报价。它会是这样的。

 $row['new_name'] = mysql_real_escape_string($row['name']);

我不太确定表现是否合适无论是否适合......

希望这可能会有所帮助