【问题标题】:Autocomplete search query mysql自动完成搜索查询mysql
【发布时间】:2013-11-09 04:45:30
【问题描述】:

我在搜索查询时遇到问题。

我有两列名为 'artist''title'。但是对于自动完成功能,我需要一个 SQL 查询来在有人键入时在这些列中进行搜索。我知道有一个非常简单的解决方案,如下所示:

SELECT * FROM music WHERE artist LIKE '%".$term."%' OR title LIKE
'%".$term."%'

$term = 文本框值

但是这个查询有几个大问题。假设艺术家是'DJ Test',标题是'Amazing Test Song'。如果我输入 'DJ' 它工作正常。但是当我输入'DJ Amazing' 时。没有找到搜索结果。显然当然,但我不知道如何解决它。

但这不是唯一的问题。如果有人输入'DJ Test - Amazing Test Song',它必须忽略'-'。

所以我的问题是,当我可以输入“Amazing DJ Test”之类的内容并仍然返回我需要的内容时,我的搜索查询会是什么样子?

【问题讨论】:

  • 您可以尝试LIKE '$term%' 或将% 反转为LIKE '%$term' 也可以查看this answer on SO

标签: php jquery mysql sql autocomplete


【解决方案1】:

试试这样的。

我认为它应该可以工作,但我还没有测试过。

    $terms = explode(' ', $term);

    foreach($terms as $term){

        $query  = SELECT * FROM music WHERE artist LIKE '%".$term."%' OR title LIKE '%".$term."%'

        return $query;

    }

应该可以工作

【讨论】:

    【解决方案2】:

    您必须将搜索字符串拆分为单词,然后通过将这些单词附加到查询中来将它们添加为查找条件。

    首先创建一个数组,其中包含搜索字符串中的每个单词。

    $search  = 'DJ TEST Amazing Test Song';
    $search_terms = explode(" ", $search);
    

    然后更改每个搜索词的查询:

    foreach($search_terms as $search_term) {
         //append OR to query with $search_term
         $query .= "OR artist LIKE '%".$search_term."%' OR title LIKE '%".$search_term."%'";
    
    }
    

    【讨论】:

      猜你喜欢
      • 2018-10-26
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      • 2012-11-05
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多