我已关注此用户类别按钮。当我点击该按钮时,它会将该记录保存到following_follower_categories中。我希望他们将该类别的记录纳入我的类别
表有他们的名字 类别,follow_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
现在我想实现的是当我关注某人的类别 我希望他们的artilce进入我的那个类别有限制和条件。
这是我试图做的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 in and limit clause
由于
答案 0 :(得分:0)
一个问题看起来像mode
列的表达式。 CASE表达式中的子查询应返回一个表达式和一行。而不是SELECT *
它应该是SELECT <expr>
,并且如果有可能返回多行,则应该有一个LIMIT 1子句。
如果您需要多个表达式,那么您需要重复该CASE表达式,使用不同的子查询,或者您可能需要JOIN操作。