小编Umi*_*ito的帖子

Codeigniter - 拥有和喜欢

相关问题

我对下面这个问题有一个非常相似的查询:

使用 LIKE 搜索 GROUP_CONCAT

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

我的问题

为了提供一些背景知识,在我的例子中,我有一个多对多的关系,所以有三个表:

  • 有两个字段(company_id 和 company_name)的公司
  • 扇区有两个字段(sector_id 和 text)
  • Companies_sectors 有两个字段(company_id 和部门_id)

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

我已按公司分组,将扇区.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公司仅经营“钓鱼”,并且用户搜索“钓鱼”,我希望结果显示:

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

(这就是想要的结果!)

但目前我只得到:

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

...我认为这是因为我使用过类似的文件管理器预分组?

有人可以帮忙吗?提前谢谢了!

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

php mysql codeigniter

2
推荐指数
1
解决办法
3138
查看次数

标签 统计

codeigniter ×1

mysql ×1

php ×1