0

月ごとにグループ化された各ユーザーの投稿数を見つけたいと思います。現在、投稿の日付を保存するために INT(10) unsigned を使用しています。

これを行うための超高速の方法は何でしょうか?

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 のレコードでうまくいっています。乾杯。

4

1 に答える 1

1
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
于 2013-02-05T12:23:16.107 に答える