我对此问题的查询非常相似:
Search GROUP_CONCAT using LIKE
我认为我的问题几乎相同,但在CodeIgniter中。因此,我认为我只是在寻找相同的答案,但转换为主动录音语言......
为了提供一些背景知识,在我的情况下,我有三对多的关系:
(一家公司可以在多个行业运营,多家公司在同一行业运营。)
我按公司分组将departments.sector_name显示为group_concat字段,并且我在选择级别为此连接字段指定了别名:
$this->db->select('sectors.sector_id, GROUP_CONCAT(DISTINCT sectors.text SEPARATOR "; ") as sector_text', false);
我想要包含一个过滤器,用于选择'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') );
但是这会在分组之前进行过滤,这意味着输出只会显示搜索到的扇区。例如,如果A公司在“钓鱼”和“运输”中运营,而B公司只在“钓鱼”中运营,并且用户搜索“钓鱼”,我希望结果显示:
(这是理想的结果!)
但此刻我才得到:
...我认为是因为我曾经使用过喜欢,哪些报道者预先分组?
有人可以帮忙吗?非常感谢提前!
PS如果我也可以使用别名“sector_text”而不是sector.text这是理想的(我想我已经读过“有”允许你使用别名吗?)
答案 0 :(得分:2)
我找到了答案!我刚刚将“LIKE”修改为:
$sector_text = $this->input->post('sector_text');
$this->db->having("sector_text LIKE '%$sector_text%' ");
通过活动记录感觉有点偏,但它有效。如果有一个解决方案将其保持在活动记录中,请告诉我,因为我可能更喜欢这个!
非常感谢!