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

Nin*_*ina 6 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)
Run Code Online (Sandbox Code Playgroud)

我只是想按用户的姓氏排序.

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

任何帮助表示赞赏.谢谢!

Nin*_*ina 8

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


Dev*_*per 0

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

 $row['new_name'] = mysql_real_escape_string($row['name']);
Run Code Online (Sandbox Code Playgroud)

我不太确定性能方面是否适合这样做。

希望这会有所帮助