Выберите с ограничением для того же идентификатора - PullRequest
1 голос
/ 24 апреля 2019

у меня 3 таблицы

Posts_comments

comment_id, comment_post_id, comment_value, comment_time comment_user_id
1           1                test           DATETIME     1
2           1                test2          DATETIME     2
3           2                test3          DATETIME     2
4           1                test4          DATETIME     2
5           1                test5          DATETIME     1
6           1                test6          DATETIME     2

Пользователи

member_id member_fistname member_lastname member_slug
1         John            Doe             john-doe
2         Test            User            test-user

Members_photos

member_user_id member_photo_type member_photo_name
1              2                 test.jpg
2              2                 test2.jpg

И у меня есть sql

SELECT 
      posts_comments.comment_id, 
      posts_comments.comment_post_id, 
      posts_comments.comment_value, 
      posts_comments.comment_time, 
      members.member_id, 
      members.member_lastname, 
      members.member_fistname, 
      members_photos.member_photo_name 
FROM 
    posts_comments 
LEFT JOIN 
         members ON posts_comments.comment_user_id = members.member_id 
LEFT JOIN 
         members_photos ON members.member_id = members_photos.member_user_id 
AND 
   members_photos.member_photo_type = 2 
ORDER BY 
        posts_comments.comment_time DESC 
LIMIT 4

Но этот запрос показывает только последние 4 комментария независимо от comment_post_id.В этом случае я хочу показать последние 4 комментария для каждого comment_post_id (в этом примере: 4 комментария, где comment_post_id = 1 и 1 комментарий, где comment_post_id = 2).Надеюсь, я написал это достаточно четко.Спасибо 4 помогите :)

1 Ответ

1 голос
/ 24 апреля 2019

используйте row_number() оконную функцию, если это версия mariadb MariaDB 10.2.0 или greatere

select a.* from (    SELECT 
              posts_comments.comment_id, 
              posts_comments.comment_post_id, 
              posts_comments.comment_value, 
              posts_comments.comment_time, 
              members.member_id, 
              members.member_lastname, 
              members.member_fistname, 
              members_photos.member_photo_name,
             row_number()over(partition by  posts_comments.comment_post_id order by posts_comments.comment_time desc) rn
        FROM 
            posts_comments 
        LEFT JOIN 
                 members ON posts_comments.comment_user_id = members.member_id 
        LEFT JOIN 
                 members_photos ON members.member_id = members_photos.member_user_id 
        AND 
           members_photos.member_photo_type = 2
    ) a where a.rn<=4
...