我正在撰写查询
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`
FROM
`user_bookmarks`
left join `bookmarks`
on `user_bookmarks`.`bookmark_id` = `bookmarks`.`id`
left join `categories`
on `user_bookmarks`.`category_id` = `categories`.`id`
WHERE
`category_id` IN(164,170,172)
LIMIT 0, 6
它正在获取前6个书签。但我希望它能从每个类别中获取6个书签。我们可以在mysql本身做到这一点。
请不要......
由于
答案 0 :(得分:1)
您可以使用排名查询为每个类别提供排名,并使用您在每个类别下的所需记录数进行过滤,查询将为您提供每个类别的6条记录
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
答案 1 :(得分:0)
您必须使用GROUP BY语句,但每个语句都不能有限制。
我建议你在Old post中回答这个问题,然后阅读帖子中提到的文章。