sql >> Database teknologi >  >> RDS >> Mysql

Mysql-grænse med in statement

Du kan bruge en rangeringsforespørgsel til at give en rangering for hver kategori og filtrere den med dit ønskede antal poster pr. kategori under forespørgslen vil give dig 6 poster fra hver kategori

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. Er det muligt at sammenkæde kolonneværdier i en streng ved hjælp af CTE?

  2. Adaptive Server er ikke tilgængelig eller eksisterer ikke fejl ved forbindelse til SQL Server fra PHP

  3. For at logge på GET eller POST?

  4. Tilføj ordensindikatoren til en dato i PostgreSQL