这是一个常见的问题,我无法找到一个优雅的方法来处理。
数据库包含5000条记录。我需要在页面上显示这些记录,但它们需要按日排序和分组。
record3456
record456
record456
record345234
record3456
record81
record8324
record983
record834
record918
...
等。如何在MySQL / PHP中完成? Ruby怎么样?我可以获取所有记录,然后对它们进行排序并使用PHP手动操作它们,但这很慢。
答案 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)