0

コミュニティ フォーラムに「いいね」システムがあります。すべての内部いいねは、log_like というデータベースに保存されます。

CREATE TABLE `log_like` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_member` mediumint(8) NOT NULL,
  `id_message` int(10) NOT NULL,
  `id_poster` mediumint(8) NOT NULL DEFAULT '0',
  `time` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `id_member` (`id_member`),
  KEY `id_message` (`id_message`)
) ENGINE=MyISAM;

先月最も気に入ったメンバー ID (上記の DDL の id_poster フィールド) を取得する必要があります。したがって、同じ「id_poster」が過去 1 か月のレコードに何回出現するかを GROUP および COUNT する必要があると思われます。私はそれを最も好きな10に制限したい. フィールド「時刻」には、参照用の UNIX 時刻が格納されます。

残念ながら、これを達成する方法がわかりません。誰でも助けることができますか?

4

3 に答える 3

1

だから、これが私が最終的に得たものです:

SELECT 
  id_poster, 
  COUNT(1) AS like_count
FROM 
  log_like
WHERE 
  time BETWEEN UNIX_TIMESTAMP('2012-11-01') AND UNIX_TIMESTAMP('2012-12-01')
GROUP BY 
  id_poster
ORDER BY 
  like_count 
DESC
LIMIT 10

このようにして、前に提案した今から過去 30 日ではなく、過去 1 か月 (2012 年 11 月) の上位結果を取得します。(すべての作業について Barmar に感謝します)

于 2012-12-14T21:37:52.440 に答える
1
select id_poster, count(*) like_count
from log_like
where time > unix_timestamp(date_sub(now(), interval 1 month))
group by id_poster
order by like_count desc
limit 10

に索引があれば最高ですid_poster

于 2012-12-14T20:16:37.073 に答える
0
SELECT DISTINCT id, count(*) as '#oflikes' from log_like
WHERE 
  time BETWEEN UNIX_TIMESTAMP('2012-11-01') AND UNIX_TIMESTAMP('2012-12-01')
LIMIT 10;
于 2012-12-14T21:43:33.370 に答える