首页 > 解决方案 > 如何进行 Codeigniter 拆分搜索

问题描述

我希望 codeigniter 搜索与列中的任何一个单词匹配。

示例:假设搜索查询是“男士时装店”,现在表格列标题是“时装店”,所以我希望搜索输入逐字拆分并匹配列。

任何帮助请

public function search($query) 
  {
    $q = $this->db->from('tablename')
    ->like('title',$query)
    ->get();
    return $q->result();
  }

更新的问题

public function search_query($query,$limit,$offset) 
{
    $keywords = explode(' ', $query);

    foreach ($keywords as $keyword)
    {
    $keyword = trim($keyword);
    $this->db->or_where("`title` LIKE '%$keyword%'");
    $this->db->join('table2', 'tablename.id = table2.id');
    $this->db->limit( $limit , $offset );
    $this->db->order_by('updated_on','desc');
}
$this->db->get('tablename');
return  $this->db->result();
}

错误得到

Not unique table/alias: 'table2'

    SELECT * FROM `tablename` JOIN `table2` ON `tablename`.`id` = `table2`.`id` JOIN `table2` ON `tablename`.`id` = `table2`.`id` WHERE `title` LIKE '%fashion%' OR `title` LIKE '%outlet%' ORDER BY `updated_on` DESC, `updated_on` DESC LIMIT 50

标签: mysqlcodeigniter

解决方案


请找到按关键字优先级排序的更新答案。

$keywords = explode(' ', $query);
 $this->db->select('*');
 $this->db->from('tablename');
 $this->db->join('table2', 'tablename.id = table2.id','left');
 $orderbyQry = "CASE "; 
 foreach ($keywords as $key => $keyword)
 {
    $orderbyQry.="WHEN tablename.title LIKE '%$keyword%' THEN $key ";
    $keyword = trim($keyword);
    $this->db->or_where("tablename.title LIKE '%$keyword%'"); 
 }
 $orderbyQry.=" ELSE 100 END ";
 $this->db->limit( $limit , $offset );
 $this->db->order_by($orderbyQry,'asc');
 $this->db->get();
 return  $this->db->result();

推荐阅读