php - MySQL GROUP BY UNIX 时间戳

标签 php mysql group-by timestamp aggregate-functions

我正在尝试从 MySQL 数据库中获取一些行,并按发布日期对它们进行分组。

最终结果我想要以下..

星期一 -第1条 -第2条 -第 3 条

星期二 -第1条 -第 2 条

星期三 -第1条 -第2条 - 第 3 条 -第 4 条

等等,我不确定这是否可以在没有 PHP 做额外工作的情况下单独在 MySQL 中完成。

这是我目前的查询,但似乎没有按天分组。

SELECT 
cms_news.news_id,
cms_news.news_title,
cms_news.news_date,
cms_news.news_category,
cms_news.news_source,
cms_news.news_type,
cms_news.news_content
FROM 
cms_news cms_news,
GROUP BY 
DAYOFMONTH(FROM_UNIXTIME(cms_news.news_date)) 
ORDER BY 
cms_news.news_date DESC

谢谢。

最佳答案

您的上述查询确实有效,除了当您GROUP BY 一列时,您必须以某种方式聚合所有其他列。

例如,GROUP BY Day 每天返回一条记录。如果每天输入多条记录并且您要请求它们的idtitlecategory 等,MySQL 如何知道哪一个显示给你的倍数,因为它只能显示一行? (它通常显示每一天的“第一”行,因为它们出现在 “SELECT * FROM mytable” 中,但您不应该依赖它)。

解决方案是以某种方式将所有这些单独的属性(如 id)聚合到每组一个字符串中。您可以按照@narcisradu 的建议使用GROUP_CONCAT

SELECT 
GROUP_CONCAT(cms_news.news_id),
GROUP_CONCAT(cms_news.news_title),
DAYOFMONTH(FROM_UNIXTIME(cms_news.news_date)) as Day,
GROUP_CONCAT(cms_news.news_category),
GROUP_CONCAT(cms_news.news_source),
GROUP_CONCAT(cms_news.news_type),
GROUP_CONCAT(cms_news.news_content)
FROM 
cms_news cms_news,
GROUP BY 
DAYOFMONTH(FROM_UNIXTIME(cms_news.news_date)) 
ORDER BY 
cms_news.news_date DESC

这会给你例如:

1,4     Story 1 Title, Story 2 Title       <Day1>       Funny,Sad    ....

即ID、标题、类别、来源、类型和内容将每天变成一个逗号分隔的字符串。

但是这似乎不太符合您的目的(用一个字符串包含当天所有文章的内容似乎很荒谬)。

我认为你应该提出你的问题:

SELECT 
cms_news.news_id,
cms_news.news_title,
DAYNAME(FROM_UNIXTIME(cms_news.news_date)) AS Day,
cms_news.news_category,
cms_news.news_source,
cms_news.news_type,
cms_news.news_content
FROM 
cms_news cms_news,
ORDER BY news_date DESC

(请注意,我将您的 DAYOFMONTH 更改为 DAYOFWEEK 因为它似乎更符合您的原始问题。)

变化是没有分组 - 只是按日期排序。

由于您的输出是按日期排序的,因此日期名称也将按顺序排列。

然后你可以在你的 php 中做这样的事情:

$prevday='';
while($row = mysql_fetch_array($res)) {
   if ( $row['Day'] != $prevday ) {
       // day has changed!
       // make a new row. e.g:
       echo "<br/> \n" . $row['Day'];
   } 
   // now just list your article name
   echo " - " . $row['news_title'];
   $prevday = $row['Day'];
}

关于php - MySQL GROUP BY UNIX 时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8999188/

相关文章:

php - 选择两个日期之间的可用房间

php - "Something is wrong with the XAMPP installation :-("是什么意思?

java - JSP 和 SQL 数据插入

mysql - 检查与您的 mariadb 服务器版本对应的手册,了解在第 1 行 "user"附近使用的正确语法

mysql - 获取没有计数的记录

javascript - 在网站中安全嵌入代码

php - 构建C++共享库,.so被激活,等待PHP网页调用

mysql - Hive 连接到 MySQL : Access denied for user 'hive' @'localhost' hive

c# - groupby 之后的 linq 无法获取列值

sql - 如何在单个 GROUP BY DAY(date_field) SQL 查询中包含空行?