在PHP / MySQL中按天分组记录

时间:2009-11-27 03:47:32

标签: mysql

这是一个常见的问题,我无法找到一个优雅的方法来处理。

数据库包含5000条记录。我需要在页面上显示这些记录,但它们需要按日排序和分组。

10/11/2009

record3456

record456

record456

10/12/2009

record345234

record3456

2009年10月13日

10/14/2009

record81

record8324

record983

record834

10/15/2009

record918

...

等。如何在MySQL / PHP中完成? Ruby怎么样?我可以获取所有记录,然后对它们进行排序并使用PHP手动操作它们,但这很慢。

3 个答案:

答案 0 :(得分:3)

做一个:

ORDER BY your_date_column

在查询中。您可能不得不在PHP中进行分组 - 只看数据是否与最后一行不同,如果有,则打印标题。

答案 1 :(得分:1)

假设10/11/2009的示例由于重复而不正确,这是一个标准的数据透视查询。它被称为透视,因为您想要更改行到列数据。

SELECT CASE WHEN x.df = '10/11/2009' THEN x.record_column ELSE NULL END '10/11/2009',
       CASE WHEN x.df = '10/12/2009' THEN x.record_column ELSE NULL END '10/12/2009',
       CASE WHEN x.df = '10/13/2009' THEN x.record_column ELSE NULL END '10/13/2009',
  FROM (SELECT t.date_column,
               DATE_FORMAT(t.date_column, '%m/%d/%Y') 'df'
               t.record_column
          FROM TABLE t
      GROUP BY t.date_column,t.record_column) x

问题在于您的结果集如下所示:

10/11/2009  | 10/12/2009    | 10/13/2009
-----------------------------------------
record3456  | NULL          | NULL
record456   | NULL          | NULL
NULL        | record345234  | NULL
NULL        | record3456    | NULL

它可能更简单&直接使用:

SELECT t.record_column '10/11/2009'
  FROM TABLE t
 WHERE t.date_column = '10/11/2009'

...在单独的查询中查询所需的记录。

答案 2 :(得分:0)

SELECT *

FROM TABLE GROUP BY DAY(dateField)

按日期排序(dateField)

http://www.tizag.com/sqlTutorial/sqldate.php