MySQL+PHP(按日期分组)
我试图输出不同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 测试1MySQL+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中按
我非常感谢你在这方面的帮助。谢谢- 最简单的方法可能是在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时间戳,没有理由这样做。知道如何对此类查询应用分页限制吗?