如何为每个用户获得一行?

时间:2013-05-29 09:56:47

标签: mysql sql limit forum

对不起标题,我不知道如何更好地解释它......

我有一个论坛,我想在php中制作一种成就系统

我想知道有帖子> 10的用户何时发布了他们的第10条消息...

邮政表就像

post_id | post_date | userid | post_message | ...

我可以通过

为每个用户获得此结果
select userid, post_date from posts where userid=1 order by post_date limit 9,1

但我需要一个像

这样的结果集
id | date
id | date
id | date

只能用程序来完成?

2 个答案:

答案 0 :(得分:1)

尝试此查询

select 
    * 
from (
    select 
       @rn:=if(@prv=userid, @rn+1, 1) as rid, 
       @prv:=userid as userid,
       post_message
    from 
       tbl
    join 
       (select @rn:=0, @prv:=0) tmp
    order by 
       userid, 
       post_date) tmp 
where 
    rid=10

SQL FIDDLE

| RID | USERID | POST_MESSAGE |
-------------------------------
|  10 |      1 |       asdasd |
|  10 |      2 |       asdasd |

答案 1 :(得分:1)

试试这个:

SELECT userid
    , SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(post_date ORDER BY post_date), ',', 10), ',', -1) AS PostDate
    FROM posts
    GROUP BY userid
    HAVING PostDate <> '' OR PostDate IS NOT NULL

但是你需要注意GROUP_CONCAT可以容纳的最大长度。