【问题标题】:How to group the data by date in Php or MySQL? [closed]如何在 PHP 或 MySQL 中按日期对数据进行分组? [关闭]
【发布时间】:2013-03-11 10:52:14
【问题描述】:

我在mysql中有一个表

comment_id   comment_by_user   comment_date                comment_body
  1244         david_sam       2013-02-27 15:46:53          xyz
  1245         raymond_davis   2013-02-27 13:46:53          xyz
  1246         jam_jam         2013-02-14 18:46:53          xyz

我想将此数据显示为

2013-02-27 -------------------------------------
1244       david_sam        15:46      xyz     
1245       raymond_davis    13:46      xyz
2013-02-14 -------------------------------------
1246       jam_jam          18:46      xyz

我该怎么做,哪个 SQL 查询和哪个 PHP 方法?

【问题讨论】:

  • 为了让您的生活更轻松,您的 SQL 查询应该只返回 yyyy-mm-dd 格式的日期。如果您也返回时间,您只需要在稍后阶段将其过滤掉。
  • MySQL 无法生成您要求的输出。相反,您将选择 DATE(comment_date) as comment_date 以及其他列。在您的 PHP 输出中,您必须在每个循环迭代中测试日期是否已更改,如果已更改,则输出一个新标头。

标签: php mysql sql tsql


【解决方案1】:

您可以选择所有需要的列

select comment_id, comment_by_user,
       date(comment_date), time(comment_date), comment_body
from comments
order by comment_date desc, comment_id

然后在日期变化时输出行并插入额外的一行

$current_date = '';
while (list($id, $user, $date, $time, $body) = $sth->fetch(PDO::FETCH_NUM)) {
    if ($date != $current_date) {
        echo "$date ----\n";
        $current_date = $date;
    }

    echo "$id $user $time $body\n";
}

【讨论】:

    【解决方案2】:

    试试这个..

    SELECT * FROM `table_name` ORDER BY `comment_date` DESC
    

    你的 php 代码应该是这样的..

    $date = '';
    foreach($records as $record)
    {
        if($date != date('Y-m-d'), strtotime($record->comment_date))
        {
            //  print "2013-02-14 -------------------------------------";
            $date = date('Y-m-d'), strtotime($record->comment_date);
        }
    
        //  print "1246       jam_jam          18:46      xyz";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 2021-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多