【问题标题】:Check duplicate data in CodeIgniter result检查 CodeIgniter 结果中的重复数据
【发布时间】:2019-06-06 04:00:36
【问题描述】:

我有一个小论坛,想显示最近 10 条回复。 我的问题:

我从数据库中获得了一些重复的条目,因为一篇帖子中有一些回复。如何禁用所有重复的帖子并仅显示所有帖子中的一个。我试着说,如果超过 1 个回复具有相同的 forum_post_id > 只显示最后一个。

我的观点:

<?php foreach ($forum_reply as $item): ?>
                <?php $standing = $item->forum_post_id  ?>
                <div class="col-lg-12 robie" onClick="location.href='<?= site_url('viewtopic/index/' . $item->forum_post_id) ?>'">
                    <div class="catcenter55 row">
                        <div class="col-md-3 deta grew">
                            <?php echo $this->db->where('forum_post_id', $item->forum_post_id)->get('forum_post')->row()->post_head; ?>
                        </div>
                        <div class="col-md-2 deta">
                            <?php $topcat = $this->db->where('forum_post_id', $item->forum_post_id)->get('forum_post')->row()->forum_cat_id ;?>
                            <?php echo $this->db->where('forum_cats2_id', $topcat)->get('forum_cats2')->row()->forum_name; ?>
                        </div>
                        <div class="col-md-2 deta">
                            <?php echo $this->db->where('forum_post_id', $item->forum_post_id)->get('forum_post')->row()->views; ?>
                        </div>
                        <div class="col-md-2 deta">
                             <div class="likebg2">+<?php echo $this->db->where('forum_post_id', $item->forum_post_id)->get('forum_post')->row()->likes; ?></div>
                        </div>
                        <div class="col-md-3 deta">
                            <?php foreach ($this->db->order_by('timestamp', 'DESC')->get('forum_reply')->result() as $stan): ?>
                            <?php if($standing == $stan->forum_post_id): ?>
                            <?php echo $this->db->where('user_id', $stan->user_id)->get('users')->row()->username; ?> | <?php echo $this->db->order_by('timestamp', 'DESC')->where('forum_reply_id', $stan->forum_reply_id)->get('forum_reply')->row()->timestamp; ?>
                            <?php break; ?>
                            <?php endif; ?>
                            <?php endforeach; ?>
                        </div>
                    </div>
                </div>
                <?php endforeach; ?>

我的控制器

public function index() {
    $data['forum_reply'] = $this->db->get('forum_reply')->result();
}

我的结果

【问题讨论】:

    标签: codeigniter


    【解决方案1】:

    设法通过使用组来获得我认为您想要实现的目标,即

    SELECT * FROM posts GROUP BY forumId;
    

    然而,这使得订购帖子时事情变得更加复杂,这有点骇人听闻,但看看这个:

    SELECT * 
    FROM (
    SELECT * 
        FROM posts
        ORDER BY date DESC
        LIMIT 18446744073709551615
    ) AS sub
    GROUP BY sub.forumId
    ORDER BY id DESC
    

    有关子查询的参考请查看此previous question 和此post

    【讨论】:

      【解决方案2】:

      谢谢杰克,

      我变了

      $data['forum_reply'] = $this->db->get('forum_reply')->result();
      

      $data['forum_reply'] = $this->db->group_by('forum_post_id')->order_by('timestamp', 'DESC')->get('forum_reply')->result();
      

      它正在工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-18
        • 1970-01-01
        • 1970-01-01
        • 2019-03-06
        • 1970-01-01
        • 1970-01-01
        • 2017-07-02
        • 1970-01-01
        相关资源
        最近更新 更多