0

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

假设数据库表是“记录”并且考虑的字段是“记录标题”。还说以下是行中的“record_titles”。

字1
字2字1 字3 字4
字5 字2 字1字
6

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

我尝试了以下操作,但有时与单个单词不匹配。

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

如何使用它(或另一种解决方案)来选择包含至少一个单词匹配的记录。

谢谢你。

吉尔

4

2 回答 2

1

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

$searchArr = implode(', ', $arraySearch); 
$sql = "select * from records where record_title in ($searchArr);"; 
于 2016-03-06T18:45:48.930 回答
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。请告知是否需要从我的角度清除一些理解。

于 2016-03-06T18:27:16.287 回答