猿问

带有连接或大小写的 mysql 条件子查询

我有 3 张桌子Project,ProjectLikes并且User.


当登录用户浏览列表时,Projects我必须确定当前用户是否喜欢该项目,即表中有一行存储用户 ID、项目 ID ProjectLikes。


但我不知道该怎么做。这就是我获取项目的方式。我不知道如何解决这个问题。


SELECT 

   id,

   title,

   createdAt,

FROM

   Project

ORDER BY 

   createdAt desc 

LIMIT 10

我ProjectLikes正在存储项目 ID 和用户 ID。我想要的输出是一个额外的行,表示用户喜欢这个项目(自用户登录以来我已经有了用户 ID)


蝴蝶刀刀
浏览 118回答 2
2回答

BIG阳

你可以使用exists:select p.*,      (exists (select 1 from projetlikes pl where pl.projectid = p.id and pl.userid = ?)) is_liked_by_user     from project p这会向每一行添加一个0/1值,指示当前用户是否喜欢该项目。这假设该表projectlikes有列projectid 和userid。已登录用户的 ID?在查询中由 表示。

慕尼黑的夜晚无繁华

另一种方法使用JOIN:SELECT&nbsp;&nbsp; &nbsp;id,&nbsp; &nbsp;title,&nbsp; &nbsp;createdAt,&nbsp; &nbsp;CASE WHEN ProjectLikes.project_id IS NULL THEN 0 ELSE 1 END AS likedFROM&nbsp; &nbsp;ProjectLEFT JOIN ProjectLikes&nbsp;&nbsp; &nbsp; ON ProjectLikes.project_id = Project.id AND ProjectLikes.user_id = <USER_ID>&nbsp;ORDER BY&nbsp;&nbsp; &nbsp;createdAt desc&nbsp;LIMIT 10
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答