2013-02-13 3 views
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, и один с нуля Комментарии. Первое событие печатается дважды, каждый с другим комментарием, второе событие отлично отпечатывается с собственным комментарием, а третий работает отлично, печатая «без комментариев», поскольку с ним ничего не связано.

Надеюсь, это все имеет смысл!

MT

+0

Посмотрите на [различны] (http://dev.mysql.com/doc/refman/5.0/en/distinct -optimization.html) из документации mysql. ^^ – Jon

+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; 
} 
+1

Этот код не очень читабельн ... Он выглядел бы более читаемым, если бы у вас был один открывающий тег

+0

изменил его, но я думаю, что это тоже плохо читается :( –

+1

На мой вкус это более читаемый, чем раньше :) –