关键字mysql搜索返回不准确的结果

时间:2014-10-21 13:04:16

标签: php mysql search keyword

我使用下面的代码根据用户提供的关键字搜索我的数据库。它似乎在大多数情况下工作正常,但我根据位置和关键字搜索。这就是我遇到的问题。

如果我没有放置位置并且搜索它会返回所有结果,无论位置如何,这很好。如果我放入一个不存在的位置和一些关键字,它会返回与关键字匹配的所有结果,并且似乎忽略了该位置。

此外,如果我将关键字留空并按存在的位置搜索,则它似乎再次忽略该位置并返回所有结果。

所以看起来我设置位置的逻辑不起作用。

$keys = explode(" ",$tag);

    $search_sql = "SELECT DISTINCT providers.* FROM providers JOIN provider_tags ON providers.id = provider_tags.provider_Id JOIN tags ON provider_tags.tag_id = tags.id WHERE tags.tag_name LIKE '%$tag%' OR providers.provider_name LIKE '%$tag%' OR providers.provider_contact_name LIKE '%$tag%' OR providers.provider_features LIKE '%$tag%' ";

    foreach($keys as $k){
        $search_sql .= " OR tags.tag_name LIKE '%$k%' OR providers.provider_name LIKE '%$k%' OR providers.provider_contact_name LIKE '%$k%' OR providers.provider_features LIKE '%$k%' ";
    }

    $search_sql .= " AND (providers.provider_town LIKE '%{$location}%' OR providers.provider_local_area LIKE '%{$location}%' OR providers.provider_postcode LIKE '%{$location}%')";

    echo $search_sql;
    $gettags = mysqli_query($con, $search_sql) or die(mysqli_error($con));

1 个答案:

答案 0 :(得分:3)

您在循环中添加了一堆OR条件,然后为该位置添加了大AND条件。使用循环的最后AND检查您的OR条件。如果条件中的任何其他ORtrue,那么您得到的结果与AND条件无关。

修改:

如果你:

,你可能会得到你想要的结果
  • 用括号括起每个OR条件;
  • 将<{1>}条件全部包装在一起。

类似的东西:

OR