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 字段)。所以我可能需要 GROUP 和 COUNT 多少次相同的“id_poster”出现在过去一个月的记录中。我想把它限制在最喜欢的 10 个。字段“时间”存储 unix 时间以供参考。

不幸的是,我不知道如何实现这一目标。任何人都可以帮忙吗?

4

3 回答 3

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 回答
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

这样我得到了过去一个月(2012 年 11 月)的最高结果,而不是之前建议的从现在起过去 30 天的结果。(非常感谢 Barmar 所做的所有工作)

于 2012-12-14T21:37:52.440 回答
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 回答