I have a list of words. Lets say they are 'Apple', 'Orange', and 'Pear'. I have rows in the database like this:
我有一个单词列表。让我们说它们是'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? |
------------------------------------------------
I'm looking for a query on an InnoDB table that will return the 1st and 3rd row, because the content
column contains one or more words from my list. I know I could query the table once for each word in my list, and use LIKE and the % wildcard character, but I'm wondering if there is a single query method for such a thing?
我正在寻找一个返回第1行和第3行的InnoDB表的查询,因为内容列包含我列表中的一个或多个单词。我知道我可以为列表中的每个单词查询一次表,并使用LIKE和%通配符,但我想知道是否有一个单一的查询方法用于这样的事情?
2 个解决方案
#1
16
EDIT:
编辑:
Something like this:
像这样的东西:
SELECT * FROM yourtable WHERE content LIKE '%apple%' OR content LIKE '%orange%'
You can loop your words to create WHERE clause conditions.
您可以循环您的单词以创建WHERE子句条件。
For Example:
例如:
$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%"
#2
23
MySQL (I believe the 5.0 version) added the ability to use regular expressions in your SQL.
MySQL(我相信5.0版本)增加了在SQL中使用正则表达式的能力。
Check out: http://www.brainbell.com/tutorials/MySQL/Using_MySQL_Regular_Expressions.htm
查看: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;
#1
16
EDIT:
编辑:
Something like this:
像这样的东西:
SELECT * FROM yourtable WHERE content LIKE '%apple%' OR content LIKE '%orange%'
You can loop your words to create WHERE clause conditions.
您可以循环您的单词以创建WHERE子句条件。
For Example:
例如:
$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%"
#2
23
MySQL (I believe the 5.0 version) added the ability to use regular expressions in your SQL.
MySQL(我相信5.0版本)增加了在SQL中使用正则表达式的能力。
Check out: http://www.brainbell.com/tutorials/MySQL/Using_MySQL_Regular_Expressions.htm
查看: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;