2012-06-25 49 views
2
SELECT DISTINCT u.first, u.last FROM users u, user_friends f 
WHERE f.userId = 1 AND u.id = f.friendId 
ORDER BY u.first ASC, u.last ASC 

基本上我所要做的是获取当前用户的朋友(本例中为1)的所有用户的列表,名字和姓氏的升序。此查询不按照我想要的方式订购结果

所以爱丽丝安娜将显示在爱丽丝Zanna之上。

但是现在只有第一个名字被命令,即Alice Anna和Alice Zanna都显示在Bob Anna上方,但是Alice Zanna会在Alice Anna之前显示,如果它被添加到她之前的db中。

关于如何正确排列名字和姓氏的任何想法?

回答

2

如何排序concatonated姓和名:

SELECT DISTINCT u.first, u.last FROM users u, user_friends f 
WHERE f.userId = 1 AND u.id = f.friendId 
ORDER BY CONCAT(u.first, u.last) ASC 
+0

我有一种感觉,这会对性能有相当的影响.. –

+0

@ClickUpvote也许。数据库管理系统非常聪明,但应该能够优化这个很好。 – Oleksi

1

按级联值排序例如,

Order by u.First + ' ' + u.Last Asc 
+0

多少对性能的影响将这个有吗? –

+0

它肯定会放慢速度,你可以通过索引来调解。或者,你可以添加一个计算列来完成连接和索引,但为了得到你想要的排序,我认为这将会是这个主题的变体。 – cmsjr