2010-02-28 4 views
1

다음과 같은 방식으로 테이블에서 선택을 수행해야합니다. 2 열의 일부 문자열을 검색 중이며 검색 문자열은 1 또는 2 중 하나 일 수 있으며, 또는 둘 다. 검색 패턴에 대한 제한이 없습니다동일한 선택 패턴을 사용하여 2 열을 선택하는 MySQL 쿼리

SELECT * FROM table 
WHERE TITLE LIKE '%pat1%' OR TITLE LIKE '%pat2%' OR TITLE LIKE '%pat3%' etc. 

:

내가 같은 것을 사용하는 것이 하나의 열에서 선택합니다.

그러나이 쿼리를 수행하여 검색 패턴이 열에 있는지 또는 다른 열에 있는지 확인합니다.

답변

3

두 열을 연결하여 하나가됩니다.

where CONCAT(title,subject) like '%pat1%' 

MATCH (col1,col2,...) AGAINST (expr [IN BOOLEAN MODE | WITH QUERY EXPANSION])

+1

CONCAT 때문에 일치를 얻지 못하도록 이상한 구분 기호를 추가합니다. 예 : "Super", "Duper"는 "perdu"와 일치하지 않지만 "SuperDuper"는 일치합니다. 그래서 사이에 이상한 문자를 넣으십시오 (|와 같이) – van

+0

그 경우에 좋은 점은 다음과 같습니다 :'CONCAT_WS ('|', title, subject)' – Pentium10

+0

여러 개의 열에 대해 하나의 패턴에 대해 잘 작동합니다 ... 이제는 단일 열 또는 한 쌍의 열에 대한 패턴? –

0

체크 아웃 할 수 없습니다 방금 OR 두 열?

SELECT * FROM table WHERE 
col1 LIKE '%path1%' OR col2 LIKE '%path1%' OR 
col1 LIKE '%path2%' OR col2 LIKE '%path2%' OR 
etc. 

또는 정확한 검색의 의미에 따라 : 나는 주로 작업하는 DBMS에서

SELECT * FROM table WHERE 
(col1 LIKE '%path1%' OR col1 LIKE '%path2%' OR etc.) OR 
(col2 LIKE '%path1%' OR col2 LIKE '%path2%' OR etc.) 
1

, 나는 N 패턴 문자열을 저장할 임시 테이블을 만든 다음에 그것을 사용하는 것

CREATE TEMP TABLE SearchPatterns(Pattern VARCHAR(32)); 
INSERT INTO SearchPatterns('%patt1%'); 
INSERT INTO SearchPatterns('%path2%'); 
INSERT INTO SearchPatterns('%pith3%'); 
INSERT INTO SearchPatterns('%sith4%'); 

SELECT DISTINCT T.* 
    FROM MainTable AS T CROSS JOIN SearchPatterns AS P 
WHERE T.Col1 LIKE P.Pattern 
    OR T.Col2 LIKE P.Pattern; 

이것은 물론, 패턴의 임의의 수와 열의 임의의 수의 확장 : 크로스 여러 패턴과 여러 열에 대한 쿼리를 수행 할 기본 테이블과 조인 . 내가 말할 수없는 것은 MySQL이 당신이 이것을 할 수 있도록 충분히 유연한 지 여부입니다.

+0

영리한! :) ..... – Pentium10

관련 문제