Bạn có thể sử dụng truy vấn xếp hạng để đưa ra xếp hạng cho từng danh mục và lọc nó với số lượng bản ghi mong muốn của bạn cho mỗi danh mục bên dưới truy vấn sẽ cung cấp cho bạn 6 bản ghi từ mỗi danh mục
SELECT t.* FROM
(SELECT
`user_bookmarks`.`id` AS `user_bookmark_id`,
`bookmark_id`,
`user_bookmarks`.`user_id`,
`bookmark_url`,
`bookmark_website`,
`bookmark_title`,
`bookmark_preview_image`,
`bookmark_popularity`,
`category_id`,
`category_name`,
`pdf_txt_flag`,
`youtube_video`,
`content_preview`,
`snapshot_preview_image`,
`mode` ,
@r:= CASE WHEN category_id = @g THEN @r+1 ELSE @r:=1 END `rank` ,
@g:=category_id
FROM
`user_bookmarks`
LEFT JOIN `bookmarks`
ON `user_bookmarks`.`bookmark_id` = `bookmarks`.`id`
LEFT JOIN `categories`
ON `user_bookmarks`.`category_id` = `categories`.`id`
JOIN (SELECT @r:=0,@g:=0) t1
WHERE `category_id` IN (164, 170, 172)
ORDER BY category_id
) t
WHERE t.rank <=6