MySQLデータベースからPHPの日記イベントを一覧表示しようとしていますが、日ごとにグループ化されています。説明します。
これは私がこれまでに持っているもののスクリーンショットです:
ご覧のとおり、2012年10月23日に2つの日記イベントがあり、2つのカレンダーアイコン/表現/何でも表示されています。実際には、左側に1つのカレンダーアイコンを表示したいのですが、次の日まで、その日のすべてのイベントを右側にリストします。
これは私が書いたばかりのコードです。誰かが私を正しい方向に向けてください。
$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 '<div class="diary_events_item" id="diary_events_item_'.$row['entry_id'].'">';
echo '<div class="diary_events_item_left">';
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>';
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>';
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 '<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>';
}