mysql - 如何进行 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
解决方案
请找到按关键字优先级排序的更新答案。
$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();
推荐阅读
- powerbi - 创建一个度量来比较每周的发展
- node.js - 通过 DM 向用户添加角色
- pdfbox - PDFBox 2.0.11 - 添加外部字体后缓慢生成 PDF
- reactjs - React 组件无限重新渲染
- android - 网络服务发现:onServiceRegistered() 中的 NsdServiceInfo 为空 - RegistrationListener 的回调
- c++ - iostream 中是否有任何功能允许在 C++ 中清除屏幕?
- vba - 运行时错误 - 找不到此文件;验证名称和文件路径是否正确(Excel / VBA)
- sql - SQL:如何删除也在另一个表中的行?
- python - Python:未反映对另一个模块变量的更改
- performance - ETS 操作运行时