我在社区论坛上有一个"喜欢"系统。所有内部喜欢都存储在名为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"进行分组和计算。我想将其限制为最受欢迎的 10 个。字段"time"存储 unix 时间以供参考。
不幸的是,我不知道如何实现这一目标。谁能帮忙?
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
.
所以,这是我最终得到的:
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 天。(非常感谢巴马尔的所有工作)
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;