2011-01-24 6 views
0

내 메시지 시스템의받는 사람 필드에 대해 Megan Fo를 입력하면 "Megan Fox를 의미 했습니까?"라는 질문을 받게됩니다. 그렇다면 나는 또한 "누가 당신을 의미 했습니까? 메간 폭스, 메간 폭스, 메간 폭스"를 발견했습니다.SQL : theres 이미 하나가 일치하면 두 잡아?

그리고 올바르게 작성했는지 확인하십시오. (이 SQL.이 1 만 리턴하고 전체가 1 인 경우). 지금은 임 사용자

"멕 멕"그 다음은 2를 반환

에 "멕 멕"과 "을 보내려고 문제를 겪고 있지만

SELECT users.id, users.firstname, users.lastname, 
(users.firstname = 'Meg' AND users.lastname = 'Meg') AS full FROM users 
    INNER JOIN users_friends ON users.id=users_friends.uID 
    WHERE users_friends.bID='1' AND users_friends.type = 'friend' AND users_friends.accepted = '1' AND (
(users.firstname = 'Meg' AND users.lastname='Meg') OR 
(users.firstname LIKE 'Meg%' AND users.lastname LIKE 'Meg%') OR 
users.firstname LIKE 'Meg%' OR 
users.lastname LIKE 'Meg%') 

는 잘 작동 메간 폭스". 나는 그것이 전체와 일치하는 경우에만 하나를 반환 싶습니다. 그래서 지금 나는 계속 "누가 당신을 의미 했습니까?" 나는 그것을 구축하므로 1을 넘는 사람들은 "누가 당신을 의미 했는가?"

if($sql_findUser->rowCount() == 1){ 
$get = $sql_findUser->fetch(); 
    if($get["full"] == 1){ 
echo "SUCCESS, ONE FOUND FULL MATCH" 
}else{ 
echo "Did you mean ...?" 
} 
}elseif($sql_findUser->rowCount()>1){ 
Who did you mean? 
} 

어떻게 해결할 수 있습니까?

답변

0

SQL 문 끝 부분에 "Meg"로 시작하는 이름을 가진 모든 사람이 포함 된 것처럼 보입니다. Meg Meg와 Megan Fox가 모두 일치하는 이유입니다. 단축하십시오 당신의 WHERE 절에 : 나는 그것을 알고있는 것처럼

WHERE users_friends.bID='1' AND users_friends.type = 'friend' AND users_friends.accepted = '1' AND (
(users.firstname = 'Meg' AND users.lastname='Meg') OR 
(users.firstname LIKE 'Meg%' AND users.lastname LIKE 'Meg%')) 
0

다소 느릴 수 있지만 정확한 일치 (대신 like)를 사용하는 두 개의 쿼리에서 로직을 분할 할 수 있으며, 아무것도 산출하지 않으면 현재 쿼리를 실행합니다.

그러나 사용자가 Megan Fox에 들어가서 Megan Foxxy를 의미 할 때 문제가 발생합니다.

0

, 이것은
"멕 멕"... 사용하여 문제 - 당신의 코드는 "멕 멕"
와 정확히 일치하는 식별을 - 당신의 코드는 또한 "Megan Fox"와의 부분 일치를 확인합니다
- 정확히 일치하는 경우 부분 일치를 포함하지 않으려합니다.

반환 값 'knows'에 단일 레코드가 없습니다. 다른 기록들에 대해서.

부분 일치를 포함하고 싶지 않다는 것을 알고 싶다면 정확히 일치하는 부분을 완전히 확인 했어야합니다.

나에게 그 일의 두 가지 방법 ...


1) 순차하지만 별도의 쿼리 ...

는 고객이 정확한에 대한 쿼리를 실행 적이있을 표시 성냥.

레코드가 반환되지 않으면 처음과성에 부분 일치하는 쿼리를 실행하십시오.

레코드가 반환되지 않으면 첫 번째 또는성에 부분 일치하는 쿼리를 실행하십시오.

등이 같은 것입니다 귀하의 요청에 필드를 추가 일치

의 유형을 지정


2. 실행 한 쿼리 ... 또한 그런

CASE WHEN (users.firstname = 'Meg' AND users.lastname='Meg')   THEN 1 
    WHEN (users.firstname LIKE 'Meg%' AND users.lastname LIKE 'Meg%') THEN 2 
    WHEN (users.firstname LIKE 'Meg%' OR users.lastname LIKE 'Meg%') THEN 3 
END AS 'match_type' 

ORDER BY 절에 추가하여 맨 위 등에서 전체 일치를 만듭니다.

고객 t는 생성 된 각 일치 유형의 수를 확인하고 관련이없는 일치 항목을 버리거나 무시하도록 선택할 수 있습니다.

관련 문제