mysql - 如何使用 case 和 limit 语句处理这个 mysql 查询

标签 mysql sql

我已关注此用户类别按钮。当我单击该按钮时,它将将该记录保存到 following_follower_categories 中。我想把他们那个类别的记录放到我的类别中

有名字的表 类别、following_follower_categories、书签、user_bookmarks 让他们的领域像

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

2) 用户书签表

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 本身中处理这个吗?

这是我的预期输出。我需要 within in and limit 子句

enter image description here

谢谢

最佳答案

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

如果您需要多个表达式,那么您要么需要使用不同的子查询重复该 CASE 表达式,要么您可能需要一个 JOIN 操作。

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

相关文章:

MySQL 忽略特定行?

mysql - 在 REGEX mySQL 查询中使用 -

mysql - phpmyadmin 显示错误 #1064 更改表

php - MYSQL/PHP : Query with multiple joins

php - mysqldump - 定时任务

mysql - 不仅在满足条件时列出行

mysql - 通过 ODBC 带参数的 SSRS/MySQL/存储过程

sql - 在 Informix 中从数字转换为带有前导零的字符

sql - 如何在 SQL Server 中将相同 id 的行显示到列中?

mysql - 是否可以将 NULL 值与 IN 运算符匹配? (x IN (NULL, a, b))