【问题标题】:Apply distinct on join query with CodeIgniter Query Builder使用 CodeIgniter Query Builder 在连接查询上应用 distinct
【发布时间】:2016-03-04 09:19:34
【问题描述】:

我正在尝试使用 codeigniters Query Builder 进行查询

$this->db->select('*')
            ->from('users')
            ->join('user_to_group', 'users.id=user_to_group.user_id')
            ->where('user_to_group.group_id !=', $group->id);

在上面的代码中,我试图获取不在提供组中的用户记录。此查询在该阶段运行良好,但有时它会多次返回相同的记录,因为用户可以是多个组的一部分。因此,为了克服这个问题,我想将distinct 应用于此查询。

但我没有找到正确的方法。

请帮忙..

【问题讨论】:

  • 如果您需要按组的唯一记录并根据 group_id 删除重复行,我认为您想使用“按 user_to_group.group_id 分组”
  • 只需在查询的第一行添加->distinct()
  • 添加->group_by("users.id");
  • @DinosaurHunter 那行不通,它会将所有字段都纳入不同的评估中... :)
  • @PraveenKumar:同意你的观点:-)

标签: php mysql codeigniter codeigniter-3


【解决方案1】:

您需要在查询中添加group_by

将您的查询写如下:-

 $this->db->select('*')
          ->from('users')
          ->join('user_to_group', 'users.id=user_to_group.user_id')
          ->where('user_to_group.group_id !=', $group->id)
          ->group_by('users.id'); // add this line

【讨论】:

  • 语法错误->where('user_to_group.group_id !=', $group->id) :)
  • @PraveenKumar:是的,伙计!漏了分号。我已经编辑了答案。谢谢:-)
【解决方案2】:

注意:此查询仅在您使用“user_to_group”表作为多关系表的情况下才有效,这意味着您在第三个表名“user_to_group”中使用的用户和组两个表 id。

如果您需要基于 group_id 的唯一记录,请使用 group by 试试这个:

$this->db->select('*')
            ->from('users')
            ->join('user_to_group', 'users.id=user_to_group.user_id')
            ->where('user_to_group.group_id !=', $group->id)
        ->group_by("user_to_group.group_id");

因为当用户属于多个组时,您将获得多条记录,因此您将使用它来获取组的唯一记录用户虎钳,或者您将在 group_by 中应用 group_id 和 user_id 以使其在两个字段中都是唯一的。

【讨论】:

  • 请参考@PravinKumar 在其他答案中的评论。
猜你喜欢
  • 2017-12-10
  • 1970-01-01
  • 2015-10-29
  • 2013-08-23
  • 2019-05-19
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多