Umi*_*ito 2 php mysql codeigniter
我对下面这个问题有一个非常相似的查询:
我认为我的问题几乎相同,但在 CodeIgniter 中。因此,我认为我只是在寻找相同的答案,但转换为活动记录语言......
为了提供一些背景知识,在我的例子中,我有一个多对多的关系,所以有三个表:
(一家公司可以经营多个行业,多家公司可以经营同一行业。)
我已按公司分组,将扇区.sector_name 显示为 group_concat 字段,并在选择级别为此连接字段指定了别名:
$this->db->select('sectors.sector_id, GROUP_CONCAT(DISTINCT sectors.text SEPARATOR "; ") as sector_text', false);
Run Code Online (Sandbox Code Playgroud)
我想包含一个过滤器,用于选择“sector_text”(group_concat 字段)包含查询表单中的文本的位置。我明白,因为我想在聚合列表上运行过滤器,所以我应该使用“having”而不是“where”。根据上面链接的答案,看起来 MySQL 有一个 HAVING LIKE,但我很难在 CodeIgniter 的活动记录下复制它(事实上我的理解是 CodeIgniter 的 ->like() 是一个 WHERE x LIKE y ,它不是我在寻找什么......)
目前我只使用 LIKE:
$this->db->like('sectors.text', $this->input->post('sector_text') );
Run Code Online (Sandbox Code Playgroud)
但此过滤是在分组之前进行的,这意味着输出将仅显示搜索到的扇区。例如,如果A公司经营“钓鱼”和“航运”,而B公司仅经营“钓鱼”,并且用户搜索“钓鱼”,我希望结果显示:
(这就是想要的结果!)
但目前我只得到:
...我认为这是因为我使用过类似的文件管理器预分组?
有人可以帮忙吗?提前谢谢了!
PS如果我也可以使用别名“sector_text”而不是sector.text,那将是理想的(我想我已经读到“Having”允许您使用别名?)
我找到了答案!我刚刚将“LIKE”修改为:
$sector_text = $this->input->post('sector_text');
$this->db->having("sector_text LIKE '%$sector_text%' ");
Run Code Online (Sandbox Code Playgroud)
通过活动记录来完成这件事感觉有点不对劲,但它确实有效。如果有一个解决方案将其保留在活动记录中,请告诉我,因为我可能更喜欢这个!
非常感谢!