2012-09-18 4 views
0

나는 사람이 국가와 그들의 이름과 성으로 검색되는 검색 시스템에서 일하고 있습니다. 이름과성에 대해서는 concat을 사용했지만 더 이상 사용하면 효과가없는 것 같습니다. 내 쿼리는sql 쿼리가 concat 함께 작동하지 않습니다

select * from users_profile where CONCAT(fname,' ',lname) like '%v %' 
or Email like '%v %' AND country='india' 

위의 경우 ise는 "and"없이 쿼리를 사용하면 작동합니다. 하지만 더 많은 조건을 지정해야하며, 단순히 사용한다면 concat도 사용하면됩니다.

select * from users_profile where CONCAT(fname,' ',lname) like '%v %' 
or Email like '%v %' 

는 어떻게 내가 적용 할 모두 concat 추가 and condition 작업을 확인합니다. 당신은 CONCAT를 사용해서는 안

답변

1

, 홀로 당신의 WHERE 열이 주변의 모든 기능을합니다. 또한 SELECT *이 아닌 열 목록을 지정해야합니다. 또한 기준의 순서를 확인하십시오.

SELECT fullname, Email, country 
FROM 
    (SELECT CONCAT(fname, ' ', lname) AS fullname, Email, country FROM users_profile) a 
WHERE (a.fullname LIKE '%v %' OR Email LIKE '%v ') AND country = 'india' 
+0

영향 (인덱스 사용 안 함) 또는 상수 (벙어리 예 :'DATE (NOW())')를 알고있는 한 함수는 WHERE 절에서 문제가 없습니다. –

+0

@AlainCollins 저에게 인덱스를 사용하지 않는 것은 쿼리 튜닝에서 명백한 no-no처럼 보입니다. – Kermit

+0

작동하지 않습니다. 시도했습니다. –

1

을 AND OR보다 더 높은 우선 순위를 가지고, 그래서 당신은 더 논리적 그룹에 문을 필요

당신은 이런 식으로 뭔가를 시도 할 수 있습니다. 같은

뭔가 :

select * from users_profile where (CONCAT(fname,' ',lname) like '%v %' 
or Email like '%v %') AND country='india' 

작동합니다.

+0

이 작동하지 않는다면, 당신의 생각이 더 유연 해 지도록 나를 도왔습니다. –

+0

. 고맙습니다 :) –

관련 문제