2016-07-10 2 views
0

Мне нужно создать запрос, который доставит мне только последние 3 сообщения от каждого пользователя.Строки запроса запроса mysql по позиции?

у меня есть этот запрос:

SELECT p.* 
FROM post AS p 
INNER JOIN customer AS c ON c.id = p.customer 
ORDER BY p.created DESC 

Но это будет мне все сообщения. Мне нужен набор, содержащий не более 3 сообщений от каждого пользователя не более.

ответ

0

Самый простой способ в MySQL является использование переменных:

SELECT p.* 
FROM (SELECT p.*, 
      (@rn := if(@c = p.customer, @rn + 1, 
         if(@c := p.customer, 1, 1) 
         ) 
      ) as seqnum 
     FROM post p CROSS JOIN 
      (SELECT @c := 0, @rn := 1) params 
     ORDER BY p.customer, p.created DESC 
    ) p 
WHERE seqnum <= 3; 

Обратите внимание, что вы не используете какие-либо поля из customer так JOIN ненужно, если вы не используете его для фильтрации.

0
SELECT p.* 
    FROM post AS p 
    INNER JOIN customer AS c ON c.id = p.customer 
    ORDER BY p.created DESC LIMIT 3 
Смежные вопросы