2011-01-14 11 views
9

私は単語のリストを持っています。彼らは「Apple」、「Orange」、「Pear」と言います。私はこのようなデータベース内の行を持っている:content列は私のリストから1つ以上の単語が含まれているので、私は、第一及び第三行を返しますの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

EDIT:このような

何か:

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

あなたがループWHERE句の条件を作成するために、あなたの言葉をすることができます。

例については

$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

をええと、私は明らかに遅かったとあなたはより完全であるので、私はあなたが1を取得しますね。 – cbrandolino

+0

これは私が今やっていることであり、私はそれを避けることを望んでいました。これは別のクエリのネットワークオーバーヘッドを回避しますが、MySQLは内部的にテーブル内のすべての行に対して各単語を実行していると仮定しますが、基本的にはいくつかのクエリです。私は、このタイプのクエリに最適化された機能をMySQLが持っていることを期待していました。 – mellowsoon

+0

これも私を助けました、歓迎ナーブド、あなたのウィザード! –

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

ありがとうございました。正確に私が必要なもの。 –

関連する問題