我有一个困境,我正在尝试制作一个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的列,以便在控制器中帮助确定它是否是正常的帖子,评论,图像帖子,图像评论等...
提前致谢!这让我感到困惑,如果可能的话,我想把它作为单个查询。
答案 0 :(得分:2)
您可以尝试select distinct
,但是您需要将其缩小到该字段。换句话说,尝试这样的事情:
针对distinct()
$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)');