php - 查找按月份、unixtime 分组的用户帖子

标签 php mysql

我想查找按月分组的每个用户的帖子数。 我目前正在使用 INT(10) unsigned 来存储帖子日期。

什么是 super 快速的方法来做到这一点?

CREATE TABLE IF NOT EXISTS `media` (
  `pid` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `class` tinyint(1) NOT NULL DEFAULT '1',
  `date_class_changed` int(10) unsigned NOT NULL,
  `title` char(5) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
  `url` varchar(1024) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  `media` enum('image','video') CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  `thumb` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  `description` varchar(140) COLLATE utf8_unicode_ci NOT NULL,
  `username` varchar(16) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  `date` int(10) unsigned NOT NULL,
  `file` varchar(1024) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  `hash` char(32) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  `hashtag` text CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  `meta` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  `ip` int(10) unsigned NOT NULL,
  `kind` tinyint(1) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`pid`),
  UNIQUE KEY `title` (`title`),
  KEY `hash` (`hash`),
  KEY `class_date` (`class`,`date_class_changed`),
  KEY `username` (`username`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1022724 ;

这是我正在谈论的表格,我想显示每个月每个用户的帖子数量,例如:2012 年 9 月,用户 X,N 个帖子等。

在 @fthiella 的帮助下我使用的查询是:

SELECT
    DATE_FORMAT(FROM_UNIXTIME(`date`), '%Y-%m') as YearMonth, username, COUNT(*) as Posts
FROM
  media
WHERE username = 'foobar'
GROUP BY 1
ORDER BY 1 DESC

感谢上帝,它足够快,现在我将尝试优化,以防它不使用索引,但目前几乎 1M 记录表现良好。干杯。

最佳答案

SELECT
    DATE_FORMAT(FROM_UNIXTIME(`date`), '%Y-%m') as YearMonth,
    username,
    COUNT(*) as Posts
FROM
  media
GROUP BY
    DATE_FORMAT(FROM_UNIXTIME(`date`), '%Y-%m') as YearMonth,
    username

关于php - 查找按月份、unixtime 分组的用户帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14707262/

相关文章:

php - jQuery DataTable - 添加新行有效,但无法使其可编辑(jeditable)

mysql - 如何将 Amazon RDS mysql.slow_log 表引擎更改为 innodb

java - com.mysql.jdbc.MysqlDataTruncation : Data truncation: Incorrect date value: '' for column 'Date_Of_Birth' at row 1

Mysql 生成此类查询以获得结果

mysql - 如何在Windows上正确安装libmysql.dll?

php - .htaccess 错误文档重定向

javascript - 如何在生成的html的onclick函数中传递参数

php - 禁止通过 HTTPS 访问

php - 试图找到一种简单的方法让 PHP 和 Mysql DB 为 PHP5.5 做数学运算(AVG MIN MAX)

PHP AND 子句不显示结果,但 OR 是