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

日付を印刷するループと、その日付の下のすべてのデータを印刷するループ、そして前日が印刷されるように値を変更するループなど、2つのループが必要なことはわかっていますが、方法がわかりません。日付を段階的に減らします。

4

1 に答える 1

0

GROUPBY句を使用する必要があります

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 に答える