1

原則としてやや単純な問題に直面しているので、これを正しい方法で進めていない可能性があります。私は基本的に、それぞれの「コメント」があるページに「イベント」をリストしています。私は2つのテーブルに参加し、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つのイベントがあります。1つはコメントが2つ、1つはコメントが1つ、もう1つはコメントがゼロです。最初のイベントはそれぞれ異なるコメントで2回印刷され、2番目のイベントは独自のコメントで正常に印刷され、3番目のイベントは完全に機能し、何も結合されていないため「コメントなし」で印刷されます。

うまくいけば、これはすべて理にかなっています!

MT

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 に答える