gpt4 book ai didi

php - 如何通过对两列进行分组来防止重复? MySQL/代码点火器

转载 作者:行者123 更新时间:2023-11-29 02:21:01 25 4
gpt4 key购买 nike

我有一个困境,我试图制作一个 facebook 风格的墙,其中有墙表、用户表、墙贴表和图像表(对于这种情况)。为简化流程,图像张贴在图像表中,并作为墙贴创建一个条目。它按 wall id 分组,但是当发表评论时,它会为每个新评论重复 wall post。本质上,我只想要每个墙贴一个帖子。

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 的列,用于在 Controller 中帮助确定它是否是普通帖子、评论、图片帖子、图片评论等...

提前致谢!这让我没完没了,如果可能的话,我想将其保留为单个查询。

最佳答案

您可以尝试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)');

关于php - 如何通过对两列进行分组来防止重复? MySQL/代码点火器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31839058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com