MySQL 查询以过滤包含搜索字符串中任何单词的记录
MySQL query to filter records containing any of the words in search string
我必须开发一个简单的搜索页面,将搜索字符串与 MySQL table.
中的字段相匹配
假设数据库 table 是 'records' 并且考虑的字段是 'record_title'。还说以下是 'record_titles' 行。
word1 word2
word1 word3 word4
word5 word2 word1
word6
现在在搜索表单中,假设用户提交搜索词,例如 'word1 word7'、'word1'、'word1 word5'、'word1 word2' 等,它应该 return 记录标题在搜索词中至少有一个词。它不应该将搜索字符串作为子字符串,例如,如果搜索词是 'word' 它不应该 return 上面记录集中的任何记录。
我尝试了以下,但有时无法匹配单个单词。
MATCH(`recordTitle`) AGAINST ('+word1 +word2' IN BOOLEAN MODE);
如何使用它(或另一种解决方案)来 select 包含至少一个单词匹配的记录。
谢谢。
GUIR
假设您有一个要搜索的字符串:
variableToBeSearched = 'word word2 word3';
首先,您必须使用分隔符 SPACE 将其拆分为一个数组(取决于您使用的语言 MySQL)。
这样:
Array[0] = 'word'
Array[1] = 'word2'
Array[2] = 'word3'
然后迭代数组并构建查询字符串。
string Query = "SELECT * FROM records WHERE ";
if(Array.Length != 0)
{
For(i=0; i<Array.Length; i++)
{
if( i != (Array.Length-1) )
{
Query += "record_title LIKE '%" + Array[i] + "% ' OR ";
}
else
{
Query += "record_title LIKE '%" + Array[i] + "% '";
}
}
}
else
{
// No words found in the String :-)
}
然后执行QUERY。如果需要从我这边澄清一些理解,请告知。
实际上你可以在运算符中使用 sql - http://www.w3schools.com/sql/sql_in.asp
和 php 内爆函数,使数组的逗号分隔字符串用于 sql 字符串。
$searchArr = implode(', ', $arraySearch);
$sql = "select * from records where record_title in ($searchArr);";
我必须开发一个简单的搜索页面,将搜索字符串与 MySQL table.
中的字段相匹配假设数据库 table 是 'records' 并且考虑的字段是 'record_title'。还说以下是 'record_titles' 行。
word1 word2
word1 word3 word4
word5 word2 word1
word6
现在在搜索表单中,假设用户提交搜索词,例如 'word1 word7'、'word1'、'word1 word5'、'word1 word2' 等,它应该 return 记录标题在搜索词中至少有一个词。它不应该将搜索字符串作为子字符串,例如,如果搜索词是 'word' 它不应该 return 上面记录集中的任何记录。
我尝试了以下,但有时无法匹配单个单词。
MATCH(`recordTitle`) AGAINST ('+word1 +word2' IN BOOLEAN MODE);
如何使用它(或另一种解决方案)来 select 包含至少一个单词匹配的记录。
谢谢。
GUIR
假设您有一个要搜索的字符串:
variableToBeSearched = 'word word2 word3';
首先,您必须使用分隔符 SPACE 将其拆分为一个数组(取决于您使用的语言 MySQL)。 这样:
Array[0] = 'word'
Array[1] = 'word2'
Array[2] = 'word3'
然后迭代数组并构建查询字符串。
string Query = "SELECT * FROM records WHERE ";
if(Array.Length != 0)
{
For(i=0; i<Array.Length; i++)
{
if( i != (Array.Length-1) )
{
Query += "record_title LIKE '%" + Array[i] + "% ' OR ";
}
else
{
Query += "record_title LIKE '%" + Array[i] + "% '";
}
}
}
else
{
// No words found in the String :-)
}
然后执行QUERY。如果需要从我这边澄清一些理解,请告知。
实际上你可以在运算符中使用 sql - http://www.w3schools.com/sql/sql_in.asp 和 php 内爆函数,使数组的逗号分隔字符串用于 sql 字符串。
$searchArr = implode(', ', $arraySearch);
$sql = "select * from records where record_title in ($searchArr);";