Список событий дневника, сгруппированных по дням в PHP / MySQL

Я пытаюсь составить список событий дневника в PHP из базы данных MySQL, но сгруппирован по дням. Я'объясню.

Это скриншот того, что у меня есть:

Как вы можете видеть, есть два события в дневнике на 23 октября 2012 года, на которых отображаются две иконки календаря / представления / что угодно 's. Я на самом деле хочу, чтобы он показывал один значок календаря слева, но перечислял все события этого дня справа, до следующего дня - как видно из моего a̶r̶t̶i̶s̶t̶s̶ впечатление идиотов ниже:

Это код, который я только что написал, может кто-нибудь указать мне правильное направление:

$SQL = "SELECT entry_id, entry_title, entry_body, entry_date, entry_day, entry_month, entry_year ";
$SQL .= "FROM pages_diary WHERE entry_month = :this_month AND entry_year = :this_year ";
$SQL .= "ORDER BY entry_date DESC;";
// PDO stuff
if ($STH->rowCount() > 0) {
    while($row = $STH->fetch()):
        $this_db_month_word = mktime(0, 0, 0, $row['entry_month']);
        $this_db_month_word = strftime("%b", $this_db_month_word);
        echo '';
            echo '';
                echo '';
                    echo '';
                        echo $this_db_month_word;
                    echo '';
                    echo '';
                        echo str_pad($row['entry_day'],2,'0',STR_PAD_LEFT);;
                    echo '';
                echo '';
            echo '';
            echo '';
                echo '<strong>'.htmlspecialchars($row['entry_title']).'</strong><br>';
                echo '<p>'.htmlspecialchars($row['entry_body']).'</p>';
            echo '';
            echo '';
        echo '';
    endwhile;
} else {
    echo '<p>There are no diary entries logged for <strong>'.$this_month_word.' '.$this_year.'</strong>.</p>';  
}

Не ищите точный код (хотя это было бы забавно), просто объяснение подойдет, яЯ уверен, что я могу решить это из этого.

ФИКС

В конце цикла WHILE я добавил:

$last_db_day = $row['entry_day'];

А затем завернул элемент календаря в:

if ($last_db_day != $row['entry_day']) {
    echo '';
        echo $this_db_month_word;
    echo '';
    echo '';
        echo str_pad($row['entry_day'],2,'0',STR_PAD_LEFT);;
    echo '';
}
 TheCarver24 окт. 2012 г., 01:13
+1 для a̶r̶t̶i̶s̶t̶s̶ впечатление идиотов! ха-ха

Ответы на вопрос(2)

а не наоборот, вот что я сделал бы, используя ваш код:

$SQL = "SELECT entry_id, entry_title, entry_body, entry_date, entry_day, entry_month, entry_year ";
$SQL .= "FROM pages_diary WHERE entry_month = :this_month AND entry_year = :this_year ";
$SQL .= "ORDER BY entry_date DESC;";
// PDO stuff
if ($STH->rowCount() > 0) {
    $loopDay = '';

    while($row = $STH->fetch()):

        if ($row['entry_day'] != $loopDay) {
            $loopDay = $row['entry_day'];
            $changed = true;
        }


        $this_db_month_word = mktime(0, 0, 0, $row['entry_month']);
        $this_db_month_word = strftime("%b", $this_db_month_word);
        echo '<div class="diary_events_item" id="diary_events_item_'.$row['entry_id'].'">';
            echo '<div class="diary_events_item_left">';

                if ($changed) {
                    echo '<div class="calendar_wrap">';
                        echo '<div class="calendar_wrap_top">';
                            echo $this_db_month_word;
                        echo '</div>';
                        echo '<div class="calendar_wrap_bottom">';
                            echo str_pad($row['entry_day'],2,'0',STR_PAD_LEFT);;
                        echo '</div>';
                    echo '</div>';
                } else {
                    echo ' ';
                }

            echo '</div>';
            echo '<div class="diary_events_item_right">';
                echo '<strong>'.htmlspecialchars($row['entry_title']).'</strong><br>';
                echo '<p>'.htmlspecialchars($row['entry_body']).'</p>';
            echo '</div>';
            echo '<div class="clear"></div>';
        echo '</div>';

    $changed = false;
    endwhile;
} else {
    echo '<p>There are no diary entries logged for <strong>'.$this_month_word.' '.$this_year.'</strong>.</p>';
}
Решение Вопроса

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

Я обычно делаю это следующим образом:

if ($STH->execute()) {

  // output headers

  $row = $STH->fetch();
  while ($row) {
    $current_date = $row['entry_date'];

    // output $current_date initialisation
    do {
      // output event $row
    } while ($row = $STH->fetch() and $row['entry_date'] == $current_date);
    // output $current_date termination
  }

  // output footers

}
 ShadowStorm24 окт. 2012 г., 01:46
Большой! Я получил это на работу. Обновил мой вопрос, чтобы отразить это. Благодарю.

Ваш ответ на вопрос