MySQL查询过滤包含搜索字符串中任何单词的记录

时间:2016-03-06 17:49:48

标签: mysql boolean match mode against

我必须开发一个简单的搜索页面,将搜索字符串与MySQL表中的字段匹配。

假设数据库表是'记录',并且考虑的字段是'record_title'。另外说下面是行中的'record_titles'。

word1 word2
word1 word3 word4
word5 word2 word1
word6

现在在搜索表单中,例如用户提交搜索词,例如'word1 word7','word1','word1 word5','word1 word2'等,它应该返回具有搜索词中至少一个词的记录标题。它不应该将搜索字符串作为子字符串,例如,如果搜索字词为“word”,则不应返回上述记录集中的任何记录。

我试过跟随,但有时候不匹配单词。

MATCH(`recordTitle`) AGAINST ('+word1 +word2' IN BOOLEAN MODE);

如何(或其他解决方案)可用于选择包含至少一个单词匹配的记录。

谢谢。

吉尔

2 个答案:

答案 0 :(得分:1)

实际上你可以在运算符中使用sql - http://www.w3schools.com/sql/sql_in.asp 和php implode函数,用于在sql字符串中使用逗号分隔的数组字符串。

$searchArr = implode(', ', $arraySearch); 
$sql = "select * from records where record_title in ($searchArr);"; 

答案 1 :(得分:0)

假设您有一个要搜索的字符串:

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。如果需要清除某些谅解,请通知我。