2009-09-08 71 views
1

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

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

回答

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>"; 
} 

?> 
+0

+1这也是我经常这样做的。顺便说一下,PHP数组键是区分大小写的,但在上面的一种情况下使用'start_Date'。 – 2009-09-08 19:03:12

+0

“start_date,name”中的名称是什么? – Strawberry 2009-09-08 21:31:50

+0

等一下,这个电流只显示日期为h1,然后在该日期下只显示1个条目。我希望它显示该日期的所有条目。 E.g. 2007年1月6日 条目1,条目2,条目3 – Strawberry 2009-09-08 21:39:49

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. 
} 
0

你可能会想,在你的SQL语句:(假设它为datetime型)

SELECT * FROM表WHERE 日之间的“2009- 9-8 00:00:00' 与 '2008-9-8 23:59:59 '

然后通过你们的结果做你的正常循环

+0

对不起,我起初误解了这个问题。你可以循环遍历所有日期,并使用jamuraa中的DISTINCT方法列出它们,然后在列出它们的循环中有这一次运行。 – kilrizzy 2009-09-08 18:56:12

0

也有看SELECT语句的GROUPBY条款。