2011-09-17 9 views
0

나는 다음을 가지고 있습니다 :쿼리에서 CONCAT을 사용하면 작동하지 않습니다.

검색을위한 두 가지 입력 유형. 하나는 도시, 주, 우편 번호, 유형의 텍스트 필드입니다. 다른 하나는 비즈니스 검색의 "유형"에 대한 선택 드롭 다운입니다.

"유형"입력과 함께 "위치"입력에 대한 결과를 반환하고자합니다. 따라서 사용자가 "위치"입력에서 New York NY, 83745를 검색하고 New York NY의 "type"입력 Walgreens에서만 Walgreens를 검색하면 83745가 반환됩니다. HOWEVER, 내 쿼리에 CONCAT 메서드를 사용하면이 제한이 있습니다. 사용자는 "위치"입력에서 쉼표와 공백을 사용할 수 있습니다. 그러나 "유형"입력은 모두 무시됩니다. 두 검색 유형 모두 내가 CONCAT을 꺼내서 기본 단일 WHERE 절을 사용하는 경우에만 함께 작동합니다. 그렇다면 CONCAT과 "AND style LIKE '%$search_type%'";을 어떻게 함께 사용할 수 있습니까?

$query = "SELECT street, city, state, type FROM location 
    WHERE 
    CONCAT(city, ', ', state, ', ', zip_code) LIKE '%$search_location%' 
    OR CONCAT(city, ' ', state, ' ', zip_code) LIKE '%$search_location%' 
    AND type LIKE '%$search_type%'"; 
+1

이제 ... 좋은 인덱스 활용이 될 수 없습니다. 또한 사용자 입력에 대해 매우 제한적입니다. 'AND'가 우선 순위가 높고 'OR'인지 알고 계셨습니까? 'x OR y AND z'는'x OR (y and z)'입니까? –

+0

검색어가 짧습니다. 어쨌든 나는 그것을 알아 내고 싶다. – Graham

+0

두 개의 'LIKE'표현을 대괄호로 묶어야한다. – Ramon

답변

-1

이 구문은 mysql에서 지원되지 않습니다. concat은 열이 아닌 문자열을 병합 할 수 있습니다.

이 당신의 최선의 선택입니다, 저는 믿습니다 : 적절한 일치 작업을

$query = "SELECT street, city, state FROM location 
    WHERE 
    (city LIKE '%$search_location%' or state LIKE '%$search_location%' or zip_code LIKE '%$search_location%') 
    AND style LIKE '%$search_type%'"; 

을 위해 :

ALTER TABLE location ADD FULLTEXT(city, state, zip_code); 

$query = "SELECT street, city, state FROM location 
    WHERE match (city, state, zip_code) against ('$search_location' in boolean mode) 
    AND style LIKE '%$search_type%'"; 
+0

위치 입력에서 펑키 구두점을 허용하려면 어떻게해야합니까? – Graham

+0

"펑키"는 무엇을 의미합니까? 연결이 열리면 "mysql_real_escape_string ($ field)"을 사용하십시오. – roselan

+0

이 답변은 의미가 없습니다. 'CONCAT'은 열 참조에서 완벽하게 작동합니다 - "SQL 객체"가 의미하는 것은 무엇입니까? – Ramon

0

시도는 부울 전체 텍스트가 http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html

$query = "SELECT street, city, state, type FROM location 
WHERE 
MATCH ($search_location) AGAINST (CONCAT(city, ' ', state, ' ', zip_code) IN BOOLEAN MODE) 
AND type LIKE '%$search_type%'"; 
을 검색 사용

이 예제는 효과가 없을 것이라고 생각하지만, 당신은 그것을 알게 될 것입니다

+0

'ALTER TABLE location ADD FULLTEXT (city, state, zip_code);가 완료되었다고 가정하면 '(city, state, zip_code)와 ('부울 모드의 '$ search_location')이 일치합니다. – roselan

+0

감사합니다. roselan –

관련 문제