CodeIgniter 搜索查询

问题描述 投票:0回答:2

我正在编写一些脚本,我想创建搜索。我的项目基于 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');

经过一些调整:

$this->db->select('title, content, date, hyperlink');
foreach ($parts as $q)
{
    $this->db->or_like(array('title' => $q, 'content' => $q));
}
$this->order_by('id_article', 'desc')
$show_results = $this->db->get('news');

创建良好查询的最佳方法是什么?

php mysql codeigniter search
2个回答
1
投票

尝试一下这段代码。这将为您的搜索查询提供更多帮助。无论该单词存在于何处,它将搜索任意数量的单词。

$this->db->select('title, content, date, hyperlink');
$this->db->where("title LIKE '%$query%' OR content LIKE '%$query%'");

希望这对您有帮助。


0
投票

array_reduce()
将允许您分解以空格分隔的字符串并无缝链接所需的查询构建方法。

我觉得这种风格最优雅。

您的模型方法应该接收一个名为

$userInput
的单个字符串类型参数。

return array_reduce(
    explode(' ', $userInput),
    fn($qb, $word) => $qb->or_like([
        'title' => $word,
        'content' => $word,
    ]),
    $this->db
)
->select('title, content, date, hyperlink')
->order_by('id_article', 'DESC')
->get('news')
->result();

result()
将生成零个或多个对象的数组。

© www.soinside.com 2019 - 2024. All rights reserved.