我在社区论坛上有一个“喜欢”的系统。所有内部喜欢都存储在名为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时间以供参考。
不幸的是,我不知道如何实现这一目标。有人可以帮忙吗?
答案 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;