2011-01-14 2 views
9

단어 목록이 있습니다. 'Apple', 'Orange', 'Pear'라고합니다. 이 같은 데이터베이스에 행이 다음 content 열 내 목록에서 하나 개 이상의 단어를 포함하고 있기 때문에 내가, 1과 3 행을 반환 할 것 InnoDB의 테이블에 대한 쿼리를 찾고 있어요MySQL : 열에 단어 열이 포함되어 있음

------------------------------------------------ 
|author_id | content      | 
------------------------------------------------ 
| 54   | I ate an apple for breakfast. | 
| 63   | Going to the store.    | 
| 12   | Should I wear the orange shirt? | 
------------------------------------------------ 

. 내 목록에있는 각 단어에 대해 한 번씩 테이블을 쿼리 할 수 ​​있고 LIKE 및 % 와일드 카드 문자를 사용할 수 있음을 알고 있지만 그런 경우에 대한 단일 쿼리 방법이 있는지 궁금합니다.

답변

14

편집 :이 같은

뭔가 :

SELECT FROM yourtable WHERE content LIKE '%apple%' OR content LIKE '%orange%' 

당신은 루프 단어가 절 조건을 만들 수 있습니다. 예를 들어

는 :

$words = array('apple', 'orange'); 
$whereClause = ''; 
foreach($words as $word) { 
    $whereClause .= ' content LIKE "%' . $word . '%" OR'; 
} 

// Remove last 'OR' 
$whereClause = substr($whereClause, 0, -2); 

$sql = 'SELECT FROM yourtable WHERE' . $whereClause; 

echo $sql; 

Output:

SELECT FROM yourtable WHERE content LIKE "%apple%" OR content LIKE "%orange%" 
+2

어, 내가 늦게 분명히했고 당신은 더 완전한, 그래서 당신이 하나를 얻을 수 있습니다 같아요. – cbrandolino

+0

이것은 내가 지금하고있는 일이며, 나는 그것을 피하기를 희망하고 있었다. 그것은 별도의 쿼리의 네트워크 오버 헤드를 피할 수 있지만, MySQL은 내부적으로 테이블의 모든 행에 걸쳐 각 단어를 실행하고 있다고 가정합니다. 이것은 본질적으로 여러 쿼리입니다. 나는이 유형의 쿼리를 위해 MySQL에 최적화 된 기능이 있기를 바랬다. – mellowsoon

+0

이것은 나를 도왔습니다. Naveed, 당신 마법사! –

19

MySQL은 (필자는 5.0 버전을 생각) 당신의 SQL에서 정규 표현식을 사용할 수있는 기능을 추가했다.

체크 아웃 : http://www.brainbell.com/tutorials/MySQL/Using_MySQL_Regular_Expressions.htm

SELECT author_id, content 
FROM AuthorTableName 
WHERE content REGEXP 'Apple|Orange|Pear' 
ORDER BY author_id; 
+0

고마워요. 정확히 내가 필요로하는 것. –

관련 문제