我有一个mysql查询如下。
$query="SELECT name,activity FROM appid
where result > 5 AND name LIKE :term ORDER BY name ASC LIMIT 0,40";
$result = $pdo->prepare($query);
$result->bindvalue(':term','%'.$_GET["q"].'%',PDO::PARAM_STR);
$result->execute();
我想做的就是这个。
我有这样的条目,我想找到
'新闻&天气'
但是当我输入
时'新闻天气'
它当然不会找到它。我怎样才能输入并检索该条目?答案 0 :(得分:2)
Regular expressions可以解决问题:
select *
from appid
where name rlike 'news|weather' -- Matches 'news' or 'weather'
另一个例子:
select *
from appid
where name rlike 'news.*weather' -- Matches 'news' and 'wether'
-- with any characters in-between or none at all
-- (ordered)
再多一次:
select *
from appid
where name rlike '^news.{1,}weather$' -- Matches any text that starts with 'news'
-- and has at least one character before
-- ending with 'weather'
常规压缩可用于在文本字段上创建非常复杂的过滤器。请阅读上面的链接以获取更多信息。
如果您可以为表格添加全文索引,Full-text search可能是更好的方法。具体来说,是boolean Full-Text search:
select *
from appid
where match(name) against (+news +weather)
答案 1 :(得分:0)
我认为唯一可行的方法是通过代码:
选项A:将查询参数中的空格替换为'%'在代码中,但这当然会使多个单词排序
选项B:在空格上拆分参数,并根据需要使用尽可能多的LIKE动态构建查询,添加额外的":termN"每个参数。