循环出mysql数据

时间:2009-09-08 18:48:04

标签: php mysql

我有一个带日期的条目的mysql数据库。所以我想要的是显示我的数据库中的所有日期,然后在每个日期下,我想显示在specefic日期输入的数据库中的所有条目。我正在考虑两个循环,但我不知道如何编写条件以显示我的数据库中的所有日期,然后我循环在该日期下的条目。

编辑:我使用NOW()来存储日期。通过longneck使用循环,如何在检查日期是否与之前相同时忽略时间?我应该爆炸吗?什么是最好的方式?

4 个答案:

答案 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子句。