MySQL - 在过去一个月内获得大多数“喜欢”的用户

时间:2012-12-14 20:11:55

标签: mysql database unix social-media-like

我在社区论坛上有一个“喜欢”的系统。所有内部喜欢都存储在名为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个。字段“time”存储unix时间以供参考。

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

3 个答案:

答案 0 :(得分: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上有索引。

答案 1 :(得分: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的所有工作)

答案 2 :(得分: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;