【问题标题】:Multi keywords search with SQL使用 SQL 进行多关键字搜索
【发布时间】:2021-08-23 20:11:55
【问题描述】:

我在我的网站上使用基于 keyup 绑定和 ajax 请求的搜索栏。它工作正常,但我希望我的搜索引擎能够通过多关键字管理获得更好的结果。

但是我找不到任何简单的方法来设置这种搜索方法。

有人知道怎么设置吗?

这是实际发出的 SQL 请求:

if ($recherche !=""){
            $req = $this->bdd->prepare("SELECT * FROM videos WHERE titre LIKE :recherche OR auteur LIKE :recherche UNION SELECT videos.id_video, videos.titre, videos.lien, videos.auteur, videos.date_upload FROM videos RIGHT JOIN mots_clefs ON videos.id_video = mots_clefs.id_video AND mots_clefs.mot_clef LIKE :recherche ORDER BY date_upload DESC LIMIT ".$start.", ".$limit);
            $req->execute(array('recherche' => "%".$recherche."%"));
            $result = json_encode($req->fetchAll(PDO::FETCH_ASSOC));
        }

请求示例:

SELECT * FROM videos WHERE titre LIKE '%word 1 word 2%' OR auteur LIKE '%word 1 word 2%' UNION SELECT videos.id_video, videos.titre, videos.lien, videos.auteur, videos.date_upload FROM videos RIGHT JOIN mots_clefs ON videos.id_video = mots_clefs.id_video AND mots_clefs.mot_clef LIKE '%word 1 word 2%' ORDER BY date_upload DESC LIMIT 0, 20);

        

【问题讨论】:

    标签: sql search keyword-search


    【解决方案1】:

    您可以通过一次传递一个关键字来循环执行上述查询。

    1. 将用户提供的整个关键字列表放入一个字符串中。

    2. 使用 string.Split() 方法,通过传递 comma(,) 作为分隔符将关键字列表放入数组列表中。

    3. 遍历数组列表并传递给查询。 确保将从 SQL 获取的数据追加到数据表或数据集中,并且不要重写。

      string select = "SELECT * FROM [MyTable] WHERE [Title] LIKE '%" + strSearch.Replace(",", "%' OR [Title] LIKE '%") + "%'";
      

    【讨论】:

    • 好的,我尝试了您的解决方案,它有效。但是,它会导致返回的行数出现问题。因为我正在合并来自多个请求的数据,这些数据不能被返回的行数限制。如果我设置一个限制,我会失去一些结果。在这种情况下无法管理“无限滚动”和渐进式加载内容
    • 事实上,该方法有效,我可以用它管理无限滚动。但它迫使我让 SQL 返回整个结果,然后用 php 对数据进行排序。如果我有太多数据要返回,这可能会导致问题。但事实并非如此,也不太可能发生。但是 php 排序工作相当繁重,并且在循环中请求 sql 并不是一个好的最终解决方案。这也可能导致 DOS 弱点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多