我已关注此用户类别按钮。当我单击该按钮时,它将把该记录保存到following_follower_categories中。我希望他们在该类别中的记录归入我的类别

有名字的桌子
类别,follower_follower_categories,书签,user_bookmarks
他们的领域像

1)书签包含
ID和其他详细信息

2)user_bookmarks表

user_id,bookmark_id,category_id

3)following_follower_categories

**** user_id(我正在关注的其他user_id)**

follower_user_id(当前用户ID)

follower_category_id(我的书签将进入的位置)

category_id(其他用户category_id)

4)类别

id,cat_name,user_id

现在我想实现的是当我关注某人时
我希望他们的关节炎在有条件的情况下属于我的范畴。

这是我试图做的mysql查询。

SELECT t.*
  FROM (SELECT f.category_id cat_id,
               `user_bookmarks`.`id` AS `user_bookmark_id`,
               `bookmark_id`,
               `user_bookmarks`.`user_id`,
               `user_bookmarks`.`category_id`,
               `bookmark_website`,
               `bookmark_title`,
               `bookmark_preview_image`,
               `pdf_txt_flag`,
               `youtube_video`,
               `snapshot_preview_image`,
               (CASE
                    WHEN `user_bookmarks`.`category_id` =
                                               f.follower_category_id
                        THEN (SELECT *
                                FROM `user_bookmarks` ub
                              WHERE ub.category_id= f.follower_category_id)
                        ELSE 0
               END) `mode`,
               @r:= CASE
                        WHEN `user_bookmarks`.`category_id` = @g THEN @r+1
                        ELSE @r:=1
                    END `rank`,
               @g:=category_id
          FROM `user_bookmarks`
               LEFT JOIN `following_follower_categories` f
                   ON f.follower_category_id =`user_bookmarks`.`category_id`
               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 `user_bookmarks`.`category_id` IN (161,
                                                  83,
                                                  107,
                                                  73)
      ORDER BY `user_bookmarks`.`created_at` DESC) t
WHERE t.rank <=10


我知道以上查询是错误的。谁能给我个主意。我们可以在mysql本身中处理吗。

这是我的预期输出。我在in和limit子句中需要它



谢谢

最佳答案

一个问题看起来像mode列的表达式。 CASE表达式中的子查询应返回一个表达式和一行。而不是SELECT *应该是SELECT <expr>,并且如果有可能返回多个行,则应该有一个LIMIT 1子句。

如果需要多个表达式,则可能需要使用其他子查询来重复该CASE表达式,或者可能需要进行JOIN操作。

关于mysql - 如何使用大小写和限制语句处理此mysql查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25683086/

10-12 12:42
查看更多