我有一个带日期的条目的mysql数据库。所以我想要的是显示我的数据库中的所有日期,然后在每个日期下,我想显示在specefic日期输入的数据库中的所有条目。我正在考虑两个循环,但我不知道如何编写条件以显示我的数据库中的所有日期,然后我循环在该日期下的条目。
编辑:我使用NOW()来存储日期。通过longneck使用循环,如何在检查日期是否与之前相同时忽略时间?我应该爆炸吗?什么是最好的方式?
答案 0 :(得分:4)
你应该使用一个查询,按日期排序,并检测日期的变化作为显示下一个日期的信号:
<?php
$sql = 'select start_date, name from events order by start_date';
$res = mysql_query($sql) or die(mysql_error());
$prev_date = null;
while ($row = mysql_fetch_assoc($res)) {
if ($row['start_date'] != $prev_date) {
echo "<h1>{$row['start_date']}</h1>"\n;
$prev_date = $row['start_Date'];
}
echo "<p>{$row['name']}</p>";
}
?>
答案 1 :(得分:1)
我假设你想要一个日期列表,这样你就可以对每个日期的条目进行单独的查询。通常您会使用如下查询:
SELECT DISTINCT date_field FROM table_name ORDER BY date_field DESC
(这将是最新的 - 首先删除DESC
以使其成为最早的 - 第一个)
现在,您可能不希望这样做,因为它需要大量查询(每天的条目一个)。按日期排序条目更有效,然后使用php中的逻辑打印出标题。所以你会使用如下代码:
$result = $db->query("SELECT * FROM table_name ORDER BY date_field DESC");
$current_date = "";
while ($row = $result->fetch_array()) {
if ($current_date != $row["date_field"]) {
echo "<h3>{$row['date_field']}</h3>";
$current_date = $row["date_field"];
}
// Print your entry from $row here.
}
答案 2 :(得分:0)
你可能想在你的SQL语句中得到它:(假设它是日期时间类型)
SELECT * FROM table 在'2009-9-8 00:00:00'和'2008-9-8之间的日期 23时59' 分59秒
然后只需在结果中进行正常循环
答案 3 :(得分:0)
另请查看GROUP
语句的BY
SELECT
子句。