web-dev-qa-db-ja.com

MySQL:列に単語リストの単語が含まれている

単語のリストがあります。それらが「Apple」、「Orange」、および「Pear」であるとしましょう。データベースには次のような行があります。

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

content列にリストの1つ以上の単語が含まれているため、1行目と3行目を返すInnoDBテーブルのクエリを探しています。リスト内の単語ごとに1回テーブルにクエリを実行し、LIKEと%ワイルドカード文字を使用できることはわかっていますが、そのようなクエリメソッドが1つあるかどうか疑問に思っています。

15
mellowsoon

編集:

このようなもの:

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;

出力:

SELECT * FROM yourtable WHERE content LIKE "%Apple%" OR content LIKE "%orange%" 
18
Naveed

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;
29
John K.