从Join中删除重复条目

时间:2013-02-13 22:43:16

标签: php mysql codeigniter

我遇到了一个原则上我觉得有点简单的问题,所以我可能不会以正确的方式解决这个问题。我基本上在列出具有各自“评论”的页面上的“事件”。我正在加入两个表,希望运行一个foreach循环来获取所有事件及其注释。不幸的是,如果一个事件有多个评论,它会重新打印原始事件,因为加入(我怀疑)。什么是实现我想要实现的目标的更好方法?

在我的模特中:

function get_events()
{
    $this->db->select('*');
    $this->db->from('events');
    $this->db->join('comments', 'comments.event_id = events.id', 'left');
    $query = $this->db->get();

    if ($query->num_rows() > 0)
    {
        return $query->result();
    }
}

在视图中:

<?php foreach($events as $row): ?>
    <div class="event">
        <?= $row->event; ?>
        <?php if($row->comment == null): ?><br>
            <i>No comments.</i>
        <?php else: ?>
            <div class="comment">
                <?= $row->comment; ?>
            </div>
        <?php endif; ?>
    </div>
<?php endforeach; ?>

在db中我基本上有3个事件,一个有2个注释,一个只有1个,一个没有注释。第一个事件打印两次,每个都有不同的评论,第二个事件打印得很好,有自己的评论,第三个事件完美地工作,打印“没有评论”,因为没有任何东西加入。

希望这一切都有意义!

MT

1 个答案:

答案 0 :(得分:4)

您可以检查是否已经回复了该事件:

<?php
$lastEvent = null;
foreach($events as $row) {
    if($row->event != $lastEvent) {
        echo '<div class="event">' . $row->event;
    }
    if($row->comment == null) {
        echo '<br><i>No comments.</i>';
    } else {
        echo '<div class="comment">' . $row->comment . '</div>';
    }
    if($row->event != $lastEvent) {
        echo '</div>';
    }

    $lastEvent = $row->event;
}