我有一个帖子表,其中用户将在日期中输入多个帖子,因此每个用户在表格中可以有不同数量的帖子。
我需要从每个用户的表中获取最后10条记录,所以说有3个用户ID为1,2,3,每个用户相对有12,15,20个帖子。
所以我需要从表中获取每个用户的最后10个帖子,我的表结构如下。
id post_data created_date user_id
1 test 2014-01-29 17:49:56 1
2 test 2014-01-28 17:49:56 1
3 test 2014-01-27 17:49:56 1
4 test 2014-01-28 17:49:56 2
5 test 2014-01-29 17:49:56 3
------------
-----------
----------
等
所以任何人都可以帮助我查询以获取每个用户的最后10条记录。
提前致谢。
答案 0 :(得分:2)
找到该用户的总记录并通过减去10来生成偏移,然后可以在mysql中设置偏移和限制
答案 1 :(得分:1)
你可以做到
SELECT id, post_data, created_date, user_id
FROM
(
SELECT id, post_data, created_date, user_id,
(
SELECT 1 + COUNT(*)
FROM posts
WHERE user_id = p.user_id
AND created_date < p.created_date
) rnum
FROM posts p
) q
WHERE rnum <= 10
ORDER BY user_id, created_date DESC;
或
SELECT id, post_data, created_date, user_id
FROM
(
SELECT id, post_data, created_date, user_id,
@n := IF(@u = user_id, @n + 1, 1) rnum, @u := user_id
FROM posts CROSS JOIN (SELECT @n := 0, @u := NULL) i
ORDER BY user_id, created_date DESC
) q
WHERE rnum <= 10
ORDER BY user_id, created_date DESC;
这是 SQLFiddle 演示
答案 2 :(得分:0)
最好创建一个存储过程并创建一个游标来遍历用户列表并获取最后10条记录。