如何通过分组两列来防止重复? MYSQL /笨

时间:2015-08-05 17:26:49

标签: php mysql codeigniter

我有一个困境,我正在尝试制作一个facebook风格的墙,你有墙桌,用户桌,墙柱表和图像表(对于这种情况)。为了简化处理,图像被张贴在图像表中,并且条目被作为墙柱。它按墙ID分组,但是当发表评论时,它会针对每个新评论重复发布帖子。基本上我只想在每个墙贴上贴一个帖子。

MYSQL查询(Codeigniter):

    $this->db->select('*');
    $this->db->from('wall_posts AS p');
    $this->db->join('users AS k', 'p.wall_poster = k.user_id AND p.wall_owner = k.user_id', 'left');
    $this->db->group_by('p.wall_id');
    $this->db->where('p.wall_poster', $pid); // $pid = given user id
    $this->db->or_where('p.wall_owner', $pid);
    $this->db->order_by('p.wall_id', 'desc');
    $this->db->limit($lim); // $lim = limit number

    return $this->db->get();

表格示例

    wall_id|owner_id|reference_id|wall_poster
    1      |0        |55         | 2
    2      |0        |30         | 1
    3      |0        |32         | 2
    4      |2        |19         | 3
    5      |0        |0          | 4
    6      |0        |0          | 2
    7      |0        |32         | 3
    8      |0        |18         | 4

现在,您可以看到ID 3和ID 7具有相同的reference_id(在这种情况下为图像),因此稍后显示结果时,引用该图像的任何帖子将多次显示而不是仅显示一次。我还有一个名为post_type的列,以便在控制器中帮助确定它是否是正常的帖子,评论,图像帖子,图像评论等...

提前致谢!这让我感到困惑,如果可能的话,我想把它作为单个查询。

1 个答案:

答案 0 :(得分:2)

您可以尝试select distinct,但是您需要将其缩小到该字段。换句话说,尝试这样的事情:

针对distinct()

的codeigniter方法进行了编辑
$this->db->distinct();
$this->db->select ('reference_id');
$this->db->from('wall_posts AS p');
$this->db->join('users AS k', 'p.wall_poster = k.user_id AND p.wall_owner = k.user_id', 'left');
$this->db->group_by('p.wall_id');
$this->db->where('p.wall_poster', $pid); // $pid = given user id
$this->db->or_where('p.wall_owner', $pid);
$this->db->order_by('p.wall_id', 'desc');

或者你可以试试:

$this->db->select('DISTINCT(reference_id)');