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