Php Codeigniter-具有和类似 相关问题

Php Codeigniter-具有和类似 相关问题,php,mysql,codeigniter,Php,Mysql,Codeigniter,我对下面这个问题有一个非常类似的疑问: 我想我的问题基本相同,但在CodeIgniter中。因此,我想我只是在寻找相同的答案,但转换成活动记录语言 我的问题 为了提供一些背景信息,在我的例子中,我有一个多对多的关系,因此有三个表: 有两个字段(公司id和公司名称)的公司 有两个字段(扇区id和文本)的扇区 有两个字段(公司id和部门id)的公司/部门 (一家公司可以在多个部门运营,多家公司在同一部门运营。) 我已按公司分组,以将sectors.sector\u name显示为group\u

我对下面这个问题有一个非常类似的疑问:

我想我的问题基本相同,但在CodeIgniter中。因此,我想我只是在寻找相同的答案,但转换成活动记录语言

我的问题 为了提供一些背景信息,在我的例子中,我有一个多对多的关系,因此有三个表:

  • 有两个字段(公司id和公司名称)的公司
  • 有两个字段(扇区id和文本)的扇区
  • 有两个字段(公司id和部门id)的公司/部门
(一家公司可以在多个部门运营,多家公司在同一部门运营。)

我已按公司分组,以将sectors.sector\u name显示为group\u concat字段,并在选择级别为该串联字段指定了别名:

$this->db->select('sectors.sector_id, GROUP_CONCAT(DISTINCT sectors.text SEPARATOR "; ") as sector_text', false);
我想包括一个过滤器,用于选择“扇区文本”(group_concat字段)包含查询表单中文本的位置。我明白,因为我想在聚合列表上运行过滤器,所以应该使用“having”而不是“where”。根据上面链接的答案,看起来MySQL有一个HAVING-like,但我在CodeIgniter的活动记录下很难复制它(事实上我的理解是CodeIgniter的->like()是一个x-like-y,这不是我想要的…)

目前,我只使用类似的:

$this->db->like('sectors.text', $this->input->post('sector_text') ); 
但这会在分组之前过滤,这意味着输出将只显示搜索到的扇区。例如,如果公司A在“钓鱼”和“发货”中操作,而公司B仅在“钓鱼”中操作,并且用户搜索“钓鱼”,我希望结果显示:

  • A公司-捕鱼;船运
  • B公司-捕鱼
(这是期望的结果!)

但目前我只得到:

  • A公司-捕鱼
  • B公司-捕鱼
。。。我想这是因为我使用了,哪种文件预分组

有人能帮忙吗?非常感谢


PS如果我也可以使用别名“sector_text”而不是sector.text,那将是理想的(我想我已经读到“Having”允许您使用别名?

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

通过active record这样做感觉有点不舒服,但它是有效的。如果有一个解决方案,使其保持在活动记录,那么请让我知道,因为我可能更喜欢这个


非常感谢

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

通过active record这样做感觉有点不舒服,但它是有效的。如果有一个解决方案,使其保持在活动记录,那么请让我知道,因为我可能更喜欢这个

非常感谢

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