MySQL: 如何获取每个用户的五个帖子?

MySQL: How to get five posts from each user?

我想从一个 table 中 select 用户,并通过为每个 LIMIT 5 设置 LIMIT 5 在另一个中检查 id

这是我有的,但我不能重复使用,第二个联合

中的 a.id
SELECT a.id AS USER,
       p.id AS post_id
FROM (
        (SELECT a.id
         FROM `user` a
         WHERE a.date=...)
      UNION
        (SELECT p.id
         FROM `post` p
         WHERE p.user_id=a.id LIMIT 5)`` `) AS post

谢谢你,阿罗哈

查询可能如下所示:

主查询:

SELECT 
t.userID,
t.postID
FROM 
(
         SELECT
          user.id AS userID,
          post.id AS postID,
          IF (@prev = post.user_id ,@cn := @cn + 1 ,@cn := 0) SL,
          @prev := post.user_id
        FROM (SELECT @cn := 0, @prev := 0) var,post
        INNER JOIN user ON user.id = post.user_id
        ORDER BY post.user_id) t
WHERE t.SL < 5;

查询将为每个用户选择 5 个帖子。


测试:

无法添加 SQL FIDDLE。

所以这里有一些带有架构的测试数据来检查查询。

DROP TABLE IF EXISTS `post`;
CREATE TABLE `post` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
);

INSERT INTO `post` VALUES ('1', '71');
INSERT INTO `post` VALUES ('2', '66');
INSERT INTO `post` VALUES ('3', '66');
INSERT INTO `post` VALUES ('4', '71');
INSERT INTO `post` VALUES ('5', '66');
INSERT INTO `post` VALUES ('6', '71');
INSERT INTO `post` VALUES ('7', '71');
INSERT INTO `post` VALUES ('8', '71');
INSERT INTO `post` VALUES ('9', '66');
INSERT INTO `post` VALUES ('10', '66');
INSERT INTO `post` VALUES ('11', '66');
INSERT INTO `post` VALUES ('12', '66');
INSERT INTO `post` VALUES ('13', '71');
INSERT INTO `post` VALUES ('14', '91');

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
);
INSERT INTO `user` VALUES ('66');
INSERT INTO `user` VALUES ('71');
INSERT INTO `user` VALUES ('91');


SELECT 
*
FROM post;

结果:

id  user_id
1   71
2   66
3   66
4   71
5   66
6   71
7   71
8   71
9   66
10  66
11  66
12  66
13  71
14  91

SELECT * FROM user;

结果:

id
66
71
91

每个用户查询的帖子总数:

SELECT 
user_id,
COUNT(*) totalPost
FROM post 
GROUP BY user_id;

结果:

user_id  totalPost
66         7
71         6
91         1

最终结果:

userID postID
66       2
66       3
66       5
66       12
66       11
71       1
71       13
71       8
71       7
71       6
91       14