php - mySql - 基于关键字的搜索查询

标签 php mysql

我找不到任何真正帮助我解决这个问题的东西。 我有一个具有以下结构的数据库:

enter image description here

和一个简单的查询来搜索和显示来自数据库的一些结果:

if ($_REQUEST['search']) {
    $q = $_REQUEST['search'];
    $q_comma = explode(", ", $q);
    $where_in_set = '';
    $count = count($q_comma);

    foreach ($q_comma as $q) {
        $counter++;
        if ($counter == $count) {
            $where_in_set .= "FIND_IN_SET('$q','keywords')";
        } else {
            $where_in_set .= "FIND_IN_SET('$q','keywords') AND ";
        }
    }


    $sql_res = "select link, description, keyword from myDB where $where_in_set or description like '%$q%'";

此代码有效,但并非如我所愿。

在关键字列中,我有不同的逗号分隔关键字,我希望即使顺序不同也能搜索到它们。

举个例子:假设我有一个关键字列

Google, Facebook, twitter

使用我当前的代码,如果我输入 Google,我可以看到结果,但如果我输入 twitter,我看不到它。

我可以做些什么来让它在不考虑关键字顺序的情况下工作,但搜索速度也非常快?

任何帮助将不胜感激。

附言。如果可能的话,我想只保留一个数据库,因为我读到过关于创建一个只有 ID 和关键字的新表,并且在我的搜索中加入了 ID 上的表,但如果可能的话我更喜欢更好的解决方案。

谢谢

编辑

一些更新:

  1. 正如@Frayne Konok 所指出的,我的查询是小写的,数据库中的所有值也是小写的,所以大小写不是问题
  2. 按照@mkaatman 的建议,我将 keyword 列用反引号 (`) 包裹起来
  3. 我更改了我的查询,现在它看起来像@user2272989 在答案中建议的那个

所以我的查询现在看起来像这样:

select link, description, keyword from myDB
where (FIND_IN_SET('google',`keyword`) or
       FIND_IN_SET('facebook', `keyword`) or 
       FIND_IN_SET('twitter', `keyword`))
       OR description like 'google, facebook, twitter'

即使顺序不同,它也会返回值,但它不会只显示我想要的那个。 例如,如果我写 twitter、google、facebook,我有 28 行的返回值,其中只有 2 行将所有三个词作为关键字,而另一个只有一两个词

编辑 2 - 更新

我只是想“重新打开”这个问题,因为我没能解决这个问题。如果我将所有关键字都更改为一个对象,那么将它们用作关键字会更好吗?或者在数据库中搜索关键字的绝对最佳和更可靠的方法是什么?拥有不同的数据库并使用 INNER JOIN?

此时,如果有帮助,我愿意更改结构和代码。

谢谢

最佳答案

这可能对你有帮助

$sql_res = "select link, description, keyword from myDB 
      where (FIND_IN_SET('yahoo',keyword) or
             FIND_IN_SET('twitter',keyword)) or 
             description like '%$q%'";

您正在 FIND_IN_SET 中使用 AND 条件

关于php - mySql - 基于关键字的搜索查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35873107/

相关文章:

mysql - 将用户表加入内容表的正确方法?

mysql - 按计数降序选择不同的行

mysql - 无法授予远程访问权限

php - 使用 PHP 和 MYSQL 的响应式垂直多级菜单

PHP Bootstrap 在本地主机上完美工作,但在 VPS 上无法工作

php - PHP SMTP服务器使用套接字: connection refused

mysql - 为什么Artifactory服务无法访问mysql?

php - 如何在查询中正确使用 CONCAT

php - 识别日期格式并在php中转换为ISO日期

php - 测试期间达到的最大连接 MySql