根据用户限制从同一个表中获取记录

时间:2014-01-30 07:31:42

标签: php mysql sql database

我有一个帖子表,其中用户将在日期中输入多个帖子,因此每个用户在表格中可以有不同数量的帖子。

我需要从每个用户的表中获取最后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条记录。

提前致谢。

3 个答案:

答案 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条记录。