MySQL: столбец содержит слово из списка слов - PullRequest
14 голосов
/ 14 января 2011

У меня есть список слов. Допустим, это «Яблоко», «Апельсин» и «Груша». У меня есть строки в базе данных, как это:

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

Я ищу запрос к таблице InnoDB, который будет возвращать 1-ю и 3-ю строку, поскольку столбец content содержит одно или несколько слов из моего списка. Я знаю, что могу запросить таблицу один раз для каждого слова в моем списке и использовать LIKE и подстановочный знак%, но мне интересно, есть ли один метод запроса для такой вещи?

Ответы [ 2 ]

27 голосов
/ 14 января 2011

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;
18 голосов
/ 14 января 2011

РЕДАКТИРОВАТЬ:

Примерно так:

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%" 
...