Php/MySql'高级搜索'页面

Cli*_*ote 8 php mysql sql search

我正在网站上的"高级搜索"页面上输入关键字,例如"我喜欢苹果",它可以使用以下选项搜索数据库:

查找:使用所有单词,使用确切的短语,至少有一个单词,没有单词

我可以通过以下方式处理'确切短语':

SELECT * FROM myTable WHERE field='$keyword';
Run Code Online (Sandbox Code Playgroud)

'至少有一个'by:

SELECT * FROM myTable WHERE field LIKE '%$keyword%';//Let me know if this is the wrong approach
Run Code Online (Sandbox Code Playgroud)

但它的'至少有一个词'和'没有词',我坚持.

关于如何实现这两个的任何建议?

编辑:关于'至少一个单词',使用explode()将关键字分解为单词并运行循环来添加不是一个好方法

(field='$keywords') OR ($field='$keywords) (OR)....
Run Code Online (Sandbox Code Playgroud)

因为查询中还有一些其他的AND/OR子句,我不知道可以有的最大子句数.

Mar*_*son 13

我建议使用MySQL FullText Search布尔全文搜索功能,你应该能够得到你想要的结果.

编辑:

请求的示例基于您请求的条件("它只是一个字段,他们可以选择4个选项中的任何一个(即1个单词,确切的单词,至少1个单词,没有该术语).")

我假设您正在使用基于您的初始帖子的PHP

<?php
$choice = $_POST['choice'];
$query = $_POST['query'];

if ($choice == "oneWord") {
    //Not 100% sure what you mean by one word but this is the simplest form
    //This assumes $query = a single word
    $result = mysql_query("SELECT * FROM table WHERE MATCH (field) AGAINST ('{$query}' IN BOOLEAN MODE)");
} elseif ($choice == "exactWords") {
    $result = mysql_query("SELECT * FROM table WHERE MATCH (field) AGAINST ('\"{$query}\"' IN BOOLEAN MODE)");
} elseif ($choice == "atLeastOneWord") {
    //The default with no operators if given multiple words will return rows that contains at least one of the words
    $result = mysql_query("SELECT * FROM table WHERE MATCH (field) AGAINST ('{$query}' IN BOOLEAN MODE)");
} elseif ($choice == "withoutTheTerm") {
    $result = mysql_query("SELECT * FROM table WHERE MATCH (field) AGAINST ('-{$query}' IN BOOLEAN MODE)");
}
?>
Run Code Online (Sandbox Code Playgroud)

希望这有助于在布尔匹配中充分使用运算符,请参阅布尔全文搜索