假设有帖子表,有以下字段:
CREATE TABLE `Post` (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`Title` varchar(200) NOT NULL COMMENT '标题',
`State` int(11) NOT NULL COMMENT '状态',
`PublishTime` datetime NOT NULL COMMENT '发帖时间',
`UserID` int(11) NOT NULL COMMENT '用户ID',
`UserIP` varchar(30) NOT NULL COMMENT 'IP',
`Content` text NOT NULL COMMENT '帖子内容',
PRIMARY KEY (`ID`),
KEY `UserID_IDX` (`UserID`),
KEY `PublishTime_IDX` (`PublishTime`),
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=utf8
有这样一个需求,首页显示最新发表的30条帖子,但是每个用户的帖子数不能超过3条,我们是用二次查询做的,先取前90条,分组一下,把COUNT(*)加起来看是不是大于30了,如果是则把每个用户ID的最新帖子UNION ALL,不知道有没有更好的解决办法?
CREATE TABLE `Post` (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`Title` varchar(200) NOT NULL COMMENT '标题',
`State` int(11) NOT NULL COMMENT '状态',
`PublishTime` datetime NOT NULL COMMENT '发帖时间',
`UserID` int(11) NOT NULL COMMENT '用户ID',
`UserIP` varchar(30) NOT NULL COMMENT 'IP',
`Content` text NOT NULL COMMENT '帖子内容',
PRIMARY KEY (`ID`),
KEY `UserID_IDX` (`UserID`),
KEY `PublishTime_IDX` (`PublishTime`),
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=utf8
有这样一个需求,首页显示最新发表的30条帖子,但是每个用户的帖子数不能超过3条,我们是用二次查询做的,先取前90条,分组一下,把COUNT(*)加起来看是不是大于30了,如果是则把每个用户ID的最新帖子UNION ALL,不知道有没有更好的解决办法?
解决方案 »
- 在PHP编写中出现的问题
- MYSQL中能否实现两列数据A列在B列中的模糊查询
- 求某个月有多少天
- 关于子分区表的问题
- MYSQL查询速度慢 1W条记录查询需要1个小时间,急急急
- [sql] 请教这种sql语句属于哪类连接?
- instr 这个函数怎么连null也能匹配到?
- mysql怎么不可以暂停trigger啊?
- 出现Fatal error: Maximum execution time of 60 seconds exceeded in .....
- 请教下200g的log文件导入到本地的mysql数据库的问题
- sql语句在mysql管理工具中查不出数据,在cmd.exe命令下可以查的出,什么原因?
- 怎么能让前n位相同的数据只取前三个
[征集]分组取最大N条记录方法征集,及散分....
from post a
where 3>(select count(*) from Post where UserID=a.UserID and PublishTime>a.PublishTime)
order by PublishTime desc limit 30;
from post a
where 3>(select count(*) from Post where UserID=a.UserID and PublishTime>a.PublishTime ORDER BY PublishTime LIMIT 0,200)
order by PublishTime desc limit 30;
看取多少条记录,这个很关键!
这明显不对嘛