【问题标题】:Group By and displaying entries under date分组依据并在日期下显示条目
【发布时间】:2023-03-23 18:29:01
【问题描述】:

这是我的数据:

id date  
1 2009-01-01 10:15:23  
2 2009-01-01 13:21:29  
3 2009-01-02 01:03:13  
4 2009-01-03 12:20:19  
5 2009-01-03 13:01:06 

我想做的是按每个日期分组,然后在每个日期下方列出 ID 号。我是否应该获取不同的日期值,然后循环浏览它们以获取该日期的条目?这效率高吗?

所以我的输出看起来像:

2009-01-01  
1  
2   
2009-01-02  
3  
2009-01-03  
4  
5  

【问题讨论】:

    标签: php sql mysql group-by


    【解决方案1】:
    $query = "SELECT DATE(date) as mydate, id FROM your_data_table ORDER BY mydate, id";
    $result = $pdo->query($query);
    
    $oldDate = false;
    while ( list($date, $id) = $result->fetch(PDO::FETCH_NUM) ) {
        if ( $oldDate != $date ) {
            echo "$date\n$id\n";
            $oldDate = $date;
        } else {
            echo "$id\n";
        }
    }
    

    您无需在多个查询中执行此操作,而是一次获取所有数据。如果您只需要一些日期,那么您只需在 ORDER BY 之前添加一个 WHERE 子句。

    【讨论】:

      【解决方案2】:

      您存储的日期有时间信息(列的类型是DATETIME或TIMESTAMP),为了进行分组,您只需要提取您的时间跨度的日期部分,您可以使用DATE()函数。

      【讨论】:

      • 对,没关系。可以说我拉了不同的日期。我这样做是作为一个单独的查询吗?然后循环浏览结果并运行另一个查询以获取与日期匹配的所有条目?只是看起来效率不高......
      • 不,您只是在执行一个查询并丢弃该列的“时间”部分。
      猜你喜欢
      • 2023-03-18
      • 2021-03-10
      • 2017-06-20
      • 1970-01-01
      • 2013-04-13
      • 1970-01-01
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多