使用CodeIgniter Query Builder在连接查询上应用distinct

时间:2016-03-04 09:19:35

标签: php mysql codeigniter codeigniter-3

我正在尝试使用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应用于此查询。

但我找不到正确的方法。

请帮助..

2 个答案:

答案 0 :(得分:0)

您需要在查询中添加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

答案 1 :(得分:0)

注意:如果您使用“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");

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