我正在使用 CodeIgniter 对我的数据库进行搜索查询。
我已经有一个用于使用单个单词进行搜索的有效查询,但它不适用于单独搜索多个单词。
我的单字查询:
$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');
创建良好查询的最佳方法是什么?
尝试一下这段代码。这将为您的搜索查询提供更多帮助。无论该单词存在于何处,它将搜索任意数量的单词。
$this->db->select('title, content, date, hyperlink');
$this->db->where("title LIKE '%$query%' OR content LIKE '%$query%'");
希望这对您有帮助。
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()
将生成零个或多个对象的数组。