根据日期从mySQL数据库中递归检索结果

时间:2013-02-12 22:11:46

标签: php mysql

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

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

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

1 个答案:

答案 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>

这应该这样做。