1

我遇到了一个我觉得原则上有点简单的问题,所以我可能不会以正确的方式解决这个问题。我本质上是在页面上列出具有各自“评论”的“事件”。我加入了两个表,并希望运行一个 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; ?>

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

希望这一切都有意义!

公吨

4

1 回答 1

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;
}
于 2013-02-13T22:55:00.967 回答