2012-06-25 3 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 

기본적으로 현재 사용자 (이 경우 ID가 1 임)의 친구 인 모든 사용자의 목록을 가져 오는 것입니다. 성과 이름의 오름차순이 쿼리는 내가 원하는 방식으로 결과를 정렬하지 않습니다.

그래서 앨리스 애나가 앨리스 자나 위에 표시됩니다.

지금은 이름 만 주문 중입니다. 즉, Alice Anna와 Alice Zanna는 모두 Bob Anna 위에 표시되지만 Alice Zanna는 Alice Anna 위에 표시됩니다.

정확하게 성과 이름을 모두 주문하는 방법에 대한 아이디어가 있으십니까?

답변

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 어쩌면. DBMS는 꽤 똑똑하지만, 이것을 꽤 잘 최적화 할 수 있어야합니다. – Oleksi

1

예를 들어.

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

이 얼마 충격 성능에있을 것이다? –

+0

확실히 느려질 것입니다. 색인 생성을 통해 중재 할 수 있습니다. 또는 연결을 수행하고 인덱스를 계산하는 계산 된 열을 추가 할 수는 있지만 원하는 모든 순서가이 테마에서 변형 될 것이라고 생각하는 순서를 얻을 수 있습니다. – cmsjr

관련 문제