我有一个像这样的简单数据库:
id int
name varchar(20)
date date // stored as "YYYY-MM-DD HH:MM:SS"
我有一个前端,每当我输入数据时,它总是插入数据插入的日期。
我想使用PHP和mySQL返回数据:
DATE
id - name // however many of these fall under the same day in the database, are printed
id - name
id - name
DATE
id - name // however many of these fall under the same day in the database, are printed
id - name
etc
我不确定如何制作循环来做到这一点。我可以像这样提取以下数据:
<table class="table">
<?php
$sql = mysql_query("SELECT id, name, date FROM database");
while($result = mysql_fetch_assoc($sql))
{ ?>
<tr>
<td colspan="6"><?php echo $result['date']; ?></td>
</tr>
<tr>
<td><?php echo $result['id']; echo $result['name']; ?></td>
</tr>
<?php
} ?>
</table>
这打印(例如):
2008-11-23 08:32:32
id - name
2008-11-23 11:12:06
id - name
2008-11-23 05:42:12
id - name
2008-11-23 07:45:23
id - name
我想要的时候
November 23rd, 2008
id - name
id - name
我知道我需要两个循环,一个循环打印日期,然后另一个循环打印该日期下的所有数据,然后更改一个值以便打印前一天,依此类推,但我不是确定如何逐步减少日期。
答案 0 :(得分:0)
您必须使用 GROUP BY 子句
GROUP BY DATE_FORMAT(date_col, '%Y-%m-%d')
并且在for循环中,如果当前日期不等于已打印的日期,则将日期添加为标题。 (您必须有一个变量来存储打印的日期)
<table class="table">
<?php
$sql = mysql_query("SELECT id, name, date FROM database GROUP BY DATE_FORMAT(date, '%Y-%m-%d') order by date ASC");
$PrevDate = false;
while($result = mysql_fetch_assoc($sql))
{
if($PrevDate!=$result['date']){
?>
<tr>
<td colspan="6"><?php echo $result['date']; ?></td>
</tr>
<? } ?>
<tr>
<td><?php echo $result['id']; echo $result['name']; ?></td>
</tr>
<?php
$PrevDate = $result['date'];
} ?>
</table>
这应该这样做。