繁体   English   中英

CodeIgniter-搜索结果-如何创建良好的查询和URI?

[英]CodeIgniter - Search results - How to create good query and URI?

我正在处理一些脚本,我想创建搜索。 我的项目基于CodeIgniter,我希望所有代码内容都与之兼容。

所以,我已经在搜索查询中工作了,但是不好,因为它不支持一个以上的单词。 因此,如果我在搜索表单中输入单词“ test”(假设测试单词在字段中的一个字段中位于数据库中),结果将很少,但是如果我输入单词“ test test test”(再次假设测试单词为在数据库中的字段之一中)将不会有任何结果。

我当前的查询:

$this->db->select('title, content, date, hyperlink')->or_like(array('title' => $query, 'content' => $query))->order_by('id_article', 'desc')->get('news');

下一个问题是URI,因为如果我搜索“某篇文章,今天很晴朗”,则会出现逗号问题,在其他情况下也可能是其他不允许的字符。 我在那儿没看过其他几个问题,但是我发现的只是$this->uri->uri_to_assoc() ,对于我来说这是行不通的,因为我没有在项目中使用英语。

这两个问题的最佳解决方案是什么?

为了解决搜索问题,您可能应该将查询分解为多个部分。

$query = 'test test 2 test3';
$parts = explode(' ', $query);

然后遍历各部分并添加or_like条件。

foreach ($parts as $q)
{
    $this->db->or_like(array('title' => $q, 'content' => $q));
}

现在,它会检查任何单词。

您可能还希望将带引号的值视为一个单词,以便“ test 2”将搜索序列test 2,而不仅是test和2。您可能需要通过正则表达式来调整获取零件的方式,例如:

preg_match_all('/"(?:\\\\.|[^\\\\"])*"|\S+/', $query, $parts);

至于URI中的无效字符,请在一端通过urlencode传递字符串,然后在另一端通过urldecode传递字符串。

$uri = urlencode('some article, today is sunny');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM