Codeigniter - HAVING和LIKE

时间:2017-04-16 23:44:23

标签: php mysql codeigniter

相关问题

我对此问题的查询非常相似:

Search GROUP_CONCAT using LIKE

我认为我的问题几乎相同,但在CodeIgniter中。因此,我认为我只是在寻找相同的答案,但转换为主动录音语言......

我的问题

为了提供一些背景知识,在我的情况下,我有三对多的关系:

  • 有两个字段的公司(company_id和company_name)
  • 包含两个字段(sector_id和text)的扇区
  • companies_sectors,有两个字段(company_id和sector_id)

(一家公司可以在多个行业运营,多家公司在同一行业运营。)

我按公司分组将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公司只在“钓鱼”中运营,并且用户搜索“钓鱼”,我希望结果显示:

  • A公司 - 钓鱼;航运
  • B公司 - 钓鱼

(这是理想的结果!)

但此刻我才得到:

  • A公司 - 钓鱼
  • B公司 - 钓鱼

...我认为是因为我曾经使用过喜欢,哪些报道者预先分组?

有人可以帮忙吗?非常感谢提前!

PS如果我也可以使用别名“sector_text”而不是sector.text这是理想的(我想我已经读过“有”允许你使用别名吗?)

1 个答案:

答案 0 :(得分:2)

我找到了答案!我刚刚将“LIKE”修改为:

$sector_text = $this->input->post('sector_text');
$this->db->having("sector_text LIKE '%$sector_text%' ");

通过活动记录感觉有点偏,但它有效。如果有一个解决方案将其保持在活动记录中,请告诉我,因为我可能更喜欢这个!

非常感谢!