自动完成搜索查询mysql
Posted
技术标签:
【中文标题】自动完成搜索查询mysql【英文标题】:Autocomplete search query 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
【参考方案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."%'";
【讨论】:
以上是关于自动完成搜索查询mysql的主要内容,如果未能解决你的问题,请参考以下文章
自动完成 jQuery / PHP / MySQL 不返回结果
jquery 自动完成 自动补全 实时搜索 实时查询 即时搜索 即时 查询