您可以使用这个技巧来获取每篇文章在用户中的位置
SELECT id, USER, @n:=if(USER=@last_user, @n+1, 0) AS n , @last_user:=USER
FROM posts, (SELECT @n:=0) init
ORDER BY USER, time_id;
然后从中进行Join或另一个select,并限制n < 3:
SELECT posts.* FROM posts JOIN (
SELECT id, USER, @n:=if(USER=@last_user, @n+1, 0) AS n , @last_user:=USER
FROM posts, (SELECT @n:=0) init
ORDER BY USER, time_id) ranked USING (id)
WHERE n < 3
ORDER BY time_id
LIMIT 15
它可以工作(请参见sqlfidle),但我不确定这是否是最有效的方法。如果您经常需要此请求,建议您在单独的(去规范化的)表中运行第一个查询,并在需要时进行更新。
另外,如果您通过PHP运行它,则SELECT @N:= 0
通常无法在连接中工作。它需要在先前的查询中单独完成。