0

我有一个像这样的简单数据库:

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

我知道我需要两个循环,一个循环打印日期,然后另一个循环打印该日期下的所有数据,然后更改一个值以便打印前一天,依此类推,但我不知道如何逐渐减少日期。

4

1 回答 1

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>

这应该这样做。

于 2013-02-12T22:19:36.697 回答