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

标签 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));

最佳答案

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

编辑:

如果您:

,您可能会得到想要的结果:
  • 将每个 OR 条件用括号括起来;
  • 所有 OR 条件组合在一起。

类似的东西:

$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}%')";

关于php - 关键字 mysql 搜索返回不准确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26487447/

相关文章:

mysql - 我如何在 `WHERE` 上使用 `JOIN`?

google-app-engine - 在数据存储实体中搜索的最佳方式是什么?

javascript - 如何使用javascript获取超出其容器的元素的宽度?

php - 直接 HTML 或 PHP 生成 html

php - 根据不同的用户输入格式化 mysql 查询

javascript - jquery filter search 需要在类别内搜索

ios - NSPredicate 使用列表中的任何对象搜索数组 |对象C

php - 使用 Visual Studio 调试 PHP 应用程序中的 JavaScript

python - 通过使用django orm操作MySQL数据库,有一些闲置的mysqld。如何关闭它们?

php - 插入到 MYSQL 表中的值与原始值不同