【问题标题】:MySQL + PHP (grouping by date)MySQL + PHP(按日期分组)
【发布时间】:2011-03-23 04:24:19
【问题描述】:

我正在尝试输出按它们存储在数据库中的日期分组的不同项目的列表(unix 时间戳)。

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

MySQL 表

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

输出

今天
测试5
测试4

昨天
测试3

7 月 28 日
测试2
测试1

如果能提供任何帮助,我将不胜感激。谢谢!;-)

【问题讨论】:

  • 一般提示是不要在 MySQL 中将日期存储为 unix 时间戳,没有理由这样做

标签: php sql mysql group-by


【解决方案1】:

您可以使用 DATE(FROM_UNIXTIME(time)) 将您的 unix 时间戳转换为日期。这将输出类似2010-07-30 的内容。

以下内容应按日期分组。

SELECT id, subject, time, DATE(FROM_UNIXTIME(time)) AS date_column
GROUP BY date_column

编辑:没有正确阅读您的问题。

为此,我只需运行标准的SELECTORDER 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;
}

【讨论】:

  • 知道如何为这种查询应用分页 (LIMIT) 吗?
【解决方案2】:

您可以为此创建一个 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 ;

然后您可以像这样构造您的查询: select niceDate(your_date_field) from table group by niceDate(your_date_field) order by your_date_field desc

免责声明:我没有测试过这个功能,但你应该明白了。

【讨论】:

  • 当输入既不是今天也不是昨天时,该函数不考虑不同年份,因此 20100728 和 20090728 被组合在一起。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 2010-10-31
    • 2019-02-14
    相关资源
    最近更新 更多