0

PHPでSQLクエリを日付でグループ化するにはどうすればよいですか...

私はこのテーブルを持っています

id  date                  Title
1   2012-12-19 11:00:00   Value 10
2   2013-01-04 09:00:00   Value 15
3   2013-01-04 20:00:00   Value 18
4   2013-01-04 21:00:00   Value 5
5   2013-01-07 09:00:00   Value 8
6   2013-01-07 09:40:00   Value 11
7   2013-01-07 11:00:00   Value 12

そして、私はそのように月でソートしたいと思います

December 19
11:00:00      Value 10

January 04
09:00:00      Value 15
20:00:00      Value 18
21:00:00      Value 5

January 07
09:00:00      Value 8
09:40:00      Value 11
11:00:00      Value 12
4

4 に答える 4

1

以下のクエリを試して、PHPループを使用して目的の結果を取得してください。表示用にデータをフォーマットするには、PHPループ内でid、time、titleの値を分割する必要があります。

SELECT
GROUP_CONCAT(id) AS id,
DATE_FORMAT(date,'%M %e') AS Date,
GROUP_CONCAT(DATE_FORMAT(date,'%H:%i:%s')) AS TimeValue,
GROUP_CONCAT(title) AS Title
FROM abc
GROUP BY DATE(date)
ORDER BY MONTH(date) DESC

OUTOUT

ID          DATE            TIMEVALUE                       TITLE
1           December 19     11:00:00                        Value 10
2,3,4       January 4       09:00:00,20:00:00,21:00:00      Value 15,Value 18,Value 5
5,6,7       January 7       09:00:00,09:40:00,11:00:00      Value 8,Value 11,Value 12

SQLフィドル:http ://sqlfiddle.com/#!2 / ec3a8 / 6

アップデート:

出力

ID          DATE                TIMEVALUE
1           December 19         11:00:00___Value 10
2,3,4       January 4           09:00:00___Value 15,20:00:00___Value 18,21:00:00___Value 5
5,6,7       January 7           09:00:00___Value 8,09:40:00___Value 11,11:00:00___Value 12

PHPコード:上記のクエリ出力に基づいて、以下のような配列があると想定しています。

<?php
$data = array(
        0=>array(
            'id'=>1,
            'date'=>'December 19',
            'time_value'=>'11:00:00___Value 10',
        ),
        1=>array(
            'id'=>2,3,4,
            'date'=>'January 4',
            'time_value'=>'09:00:00___Value 15,20:00:00___Value 18,21:00:00___Value 5',
        ),
        2=>array(
            'id'=>5,6,7,
            'date'=>'January 7',
            'time_value'=>'09:00:00___Value 8,09:40:00___Value 11,11:00:00___Value 12',
        )    
    );
if(is_array($data))
{
    foreach($data as $value)
    {
        if(is_array($value))
        {
            echo '<br />'.$value['date'].'<br />';
            $arrTime = explode(',', $value['time_title']);
            if($arrTime)
            {
                foreach($arrTime as $time)
                {
                    $arrTimeTitle = explode('_', $time);
                    echo $arrTimeTitle[0]."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".$arrTimeTitle[1]."<br />";
                }
            }
        }
    }
}
?>

最終的なPHP出力:

December 19
11:00:00     Value 10

January 4
09:00:00     Value 15
20:00:00     Value 18
21:00:00     Value 5

January 7
09:00:00     Value 8
09:40:00     Value 11
11:00:00     Value 12
于 2013-01-23T05:50:48.303 に答える
0

このクエリを使用する

SELECT
  id,
  DATE_FORMAT(date,'%M %e') as DateValue,
  DATE_FORMAT(date,'%h:%i:%s %p') as TimeValue,
  GROUP_CONCAT(Title)
from mytable
group by DATE(date)
ORDER BY MONTH(date) desc 

出力

id  |   DateValue   |   TimeValue       |   Title
----------------------------------------------------------
1   |   December 19 |   11:00:00        |   Value   10 
2   |   January 4   |   09:00:00        |   Value 15,Value 18,Value 5 
5   |   January 7   |   09:00:00        |   Value 8,Value 11,Value 12 

フロントエンドでphpexplodeTitleを使用すると、配列が取得されます

$titles = explode(',',$row['Title']);
于 2013-01-23T05:16:36.447 に答える
0

SQLではなくPHPを使用してこれを実行してみてください。

ORDER BY日付を使用してSQLを介してデータを取得し、PHPを使用して「date()」関数を使用して日付の形式をキャプチャし、日付部分が以前に取得した日付部分と一致するまで、日付フィールドとタイトルフィールドから時間部分のみを出力できます。

于 2013-01-23T05:23:17.170 に答える
0

GROUP_CONCATSQLで関数を使用します。PHPで複数のループを試すのではなく、1つのクエリでこれを実現できます。

例えば:-

SELECT 
          id,GROUP_CONCAT(date, value, '+') 
FROM 
          tablename 
GROUP BY 
          date 
ORDER BY 
          date DESC;
于 2013-01-23T05:12:55.460 に答える