,
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 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), , . , , (denormilazed) .
, PHP, SELECT @N:=0 . .