在数据库mysql php中搜索多个关键字

时间:2014-11-30 18:31:32

标签: php mysql

我的搜索功能会在每个空格后触发多个关键字中的字符串。然后它运行一个查询,它将在tags列中搜索这些关键字。

但是,因为我在LIKES之间使用AND,所以它只返回每个关键字都在tags列中的结果。如果我使用OR,它将显示每个结果,其中包含一个或多个位于标签列中的关键字。

我怎样才能得到一句话:"如何切洋葱?"如果结果只有关键字,那就找到结果:cutting,onion。

我的代码:

$searchTerms = explode(' ', htmlspecialchars($_GET['tags'], ENT_QUOTES));
$searchTermBits = array();
foreach ($searchTerms as $term) {
    $term = trim($term);
    if (!empty($term)) {
        $searchTermBits[] = "tags LIKE '%$term%'";
    }
}

$sql = "SELECT * FROM results WHERE ".implode(' AND ', $searchTermBits)." ORDER BY id DESC";

2 个答案:

答案 0 :(得分:0)

您可以使用全文搜索,但是您应该记住性能问题,因为数据库变得越大越慢。

MATCH将排除3个字符(我认为)和更少的搜索字词。这可以在服务器根目录中的主SQL文件(my.cnf)中进行调整。 (更多关于here

还要记住要正确转义搜索字词。这个例子没有那样做。

示例:

$sql = "CREATE TEMPORARY TABLE `tmp_search` 
        (FULLTEXT INDEX (tags)) 
        Engine=MyISAM 
        SELECT * FROM `results`";

// execute sql;

$sql =  "SELECT *,
        MATCH(tags) AGAINST ('".$term."' IN BOOLEAN MODE) as `tags_relevance`
        FROM `tmp_search`
        WHERE MATCH(tags) AGAINST ('".$term."' IN BOOLEAN MODE) 
        ORDER BY tags_relevance DESC";

// get results from sql

答案 1 :(得分:-1)

尝试使用此SQL并将PHP脚本输出:

SELECT * FROM results WHERE tags LIKE ('%cutting%') AND tags LIKE ('%onion%')