4

私のテーブル構造は

id  order_id  location time    date
 1   951        x              2/03/2013
 2   951        x      13:00   2/03/2013
 3   951        y              3/03/2013

これらをphpで日付ごとにグループ化して表示したい

Date 2/03/2013
Orderid 951 location x
Orderid 951 location x

Date 3/03/2013
Orderid 951 location y

実行中のmysqlクエリは

select * from table where order_id=951 GROUP BY date ORDER BY id ASC

ただし、このクエリは同じデータの最初の行のみを返します。日付カテゴリごとにグループですべての繰り返しを表示するにはどうすればよいですか。日付を別の変数として取得してデータを表示するためにphpで使用する方法。

質問を編集して、日付が繰り返しを含むグループで日付ごとに表示されるようにしたいだけであることをお知らせします。

4

5 に答える 5

1

STR_TO_DATE()日付による注文機能を使用

$result = mysql_query("select * from table ORDER BY STR_TO_DATE(date, '%d/%m/%Y') ASC, id ASC");
$last_date = "";
while(($row=mysql_fetch_assoc($result)))
{
    if($last_date != $row['date'])
    {
        echo "Date " . $row['date'] . "\n";
    }
    echo "Orderid ". $row['order_id']." location " . $row['location']. "\n";
}
于 2013-03-04T09:30:49.853 に答える
1

テーブル内のすべての行を表示する場合はORDER BY date, id、PHP でグループ化を行うことをお勧めします。

$result = mysql_query("select * from table ORDER BY data ASC,id ASC");
$last_date = "";
while(($row=mysql_fetch_assoc($result)))
{
    if($last_date != $row['date'])
    {
        echo "Date " . $row['date'] . "\n";
    }
    echo "Orderid ". $row['order_id']." location " . $row['location']. "\n";
}
于 2013-03-04T09:26:09.520 に答える
1

テーブルがtime列を所有していたため、クエリ内で検討する必要がある可能性があります。順序はデフォルトで昇順であるため、書き込みをスキップできますasc

select * from table where order_id=951 order by date,time,id;

グローバル php 変数を作成して、読み取った現在の日付を保存し、while ループで毎回比較し、グローバル変数と異なる場合は、何かを出力して最後のグループと分けることができます。

于 2013-03-04T10:05:33.707 に答える
1
select * from table where order_id=951 ORDER BY date DESC, id ASC

そして、PHPから操作します

Order By は、グループ内の行を返しません。本当に sql を使用したい場合は、グループ化された行の値を連結された文字列として返し、後で PHP から分割する GROUP_CONCAT を試してください。

于 2013-03-04T09:34:15.290 に答える
0

別の解決策は、以下を使用することGROUP_CONCATです。

select date,group_concat("Location " , location, "\n") from table where order_id=951 GROUP BY date ORDER BY id ASC

于 2013-03-04T09:41:10.530 に答える