2012-12-17 4 views
5

에 대한 전체 이름 난 다음 한 : 나는 단순히 사용자의 성을 기준으로 정렬하기 위해 노력하고있어MySQL의 주문 열

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) 

.

그러나 이름으로 정렬 할 수 있지만 성은 버그입니다. 사용자가 이름을 따옴표로 묶은 경우 (예 : "Abigail Martinez") 정렬이 잘못됩니다. 사용자가 하나의 이름 만 제공하고 닉네임 (예 : Juan) 인 경우 올바르지 않습니다. 중간 이니셜 (예. 티파니 S 빌라 나 스티브 드 라 Makinov)이있다. 불행하게도,이 전체 이름 (users.name)에 대해 하나의 열을 사용합니다.

어떤 도움에 감사드립니다. 감사합니다!

답변

0

이 경우 경우는 모든 행을 얻으려고하고, 다음으로는 mysql_real_escape_string으로 시도 할 수 있습니다. 당신이 따옴표를 가진되지 않도록. 그것은 이런 식으로 뭔가있을 것입니다.

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

을 나는

희망이 5 월 후행 공백을 제거합니다 TRIM 추가

6

substring_index(TRIM(users.name), ' ', -1) 수 있습니다 .. 그것을 위해 여부를 갈 그것의 좋은 여부도 확인 성능 현명하지 않다. 그런 다음 정렬이 예상대로 발생합니다.