MySQL+PHP(按日期分组)

MySQL+PHP(按日期分组),php,sql,mysql,group-by,Php,Sql,Mysql,Group By,我试图输出不同ITME的列表,这些ITME按存储在数据库unix时间戳中的日期分组 我需要MySQL查询和PHP输出方面的帮助 MySQL表 id |主题|时间 1 |测试1 | 1280278800 2 |测试2 | 1280278800 3 |测试3 | 1280365200 4 |测试4 | 1280451600 5 |测试5 | 1280451600 输出 今天 测试5 测试4 昨天 测试3 七月二十八日 测试2 测试1 我非常感谢你在这方面的帮助。谢谢- 最简单的方法可能是在SQL中按

我试图输出不同ITME的列表,这些ITME按存储在数据库unix时间戳中的日期分组

我需要MySQL查询和PHP输出方面的帮助

MySQL表

id |主题|时间 1 |测试1 | 1280278800 2 |测试2 | 1280278800 3 |测试3 | 1280365200 4 |测试4 | 1280451600 5 |测试5 | 1280451600

输出

今天 测试5 测试4

昨天 测试3

七月二十八日 测试2 测试1


我非常感谢你在这方面的帮助。谢谢-

最简单的方法可能是在SQL中按时间戳降序排序,并在PHP中进行分组:迭代结果集,将时间戳转换为DateTime对象;当当前日期与前一天不同时,提示:使用DateTime::format,插入一个子标题。

您可以为此创建一个mysql udf,如下所示:

DELIMITER $$

DROP FUNCTION IF EXISTS `niceDate` $$
CREATE FUNCTION `niceDate` (ts INT) RETURNS VARCHAR(255) NO SQL
BEGIN

  declare dt DATETIME;
  declare ret VARCHAR(255);

  set dt = FROM_UNIXTIME(ts);

  IF DATE_FORMAT(dt, "%Y%m%d") = DATE_FORMAT(NOW(), "%Y%m%d") THEN SET ret = 'Today';
  ELSEIF DATE_FORMAT(dt, "%Y%m%d") = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 DAY), "%Y%m%d") THEN SET ret = 'Yesterday';
  ELSE SET ret = CONCAT(DATE_FORMAT(dt, "%M "), DATE_FORMAT(dt, "%d"));
  END IF;

  RETURN ret;

END $$

DELIMITER ;
然后,您可以这样构造查询: 按nicedate从表组中选择nicedate您的日期字段按nicedate您的日期字段顺序按日期字段说明


免责声明:我还没有测试过这个函数,但您应该知道了。

您可以使用DATEFROM\u unixtime将unix时间戳转换为日期。这将输出类似2010-07-30的数据

以下内容应按日期分组

SELECT id, subject, time, DATE(FROM_UNIXTIME(time)) AS date_column
GROUP BY date_column
编辑:没有正确阅读您的问题

为此,我只需运行一个标准的SELECT和ORDER BY time DESC

然后用PHP进行分组

$lastDate = null;

foreach ($rows as $row) {
    $date = date('Y-m-d', $row['time']);
    $time = date('H:i', $row['time']);

    if (is_null($lastDate) || $lastDate !== $date) {
        echo "<h2>{$date}</h2>";
    }

    echo "{$time}<br />";

    $lastDate = $date;
}

此函数不考虑输入不是今天或昨天的不同年份,因此将20100728和20090728分组在一起。一般提示是不要将日期存储为MySQL中的unix时间戳,没有理由这样做。知道如何对此类查询应用分页限制吗?