繁体   English   中英

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

[英]mysql conditional subquery with joins or case

我有 3 个表ProjectProjectLikesUser

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

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

SELECT 
   id,
   title,
   createdAt,
FROM
   Project
ORDER BY 
   createdAt desc 
LIMIT 10

ProjectLikes我存储了项目 ID 和用户 ID。 我想要的输出是一个附加行,表示用户喜欢这个项目(因为用户登录,我已经有了用户 ID)

你可以使用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具有列projectiduserid 登录用户的 id 用? 在查询中。

使用JOIN另一种方法:

SELECT 
   id,
   title,
   createdAt,
   CASE WHEN ProjectLikes.project_id IS NULL THEN 0 ELSE 1 END AS liked
FROM
   Project
LEFT JOIN ProjectLikes 
    ON ProjectLikes.project_id = Project.id AND ProjectLikes.user_id = <USER_ID> 
ORDER BY 
   createdAt desc 
LIMIT 10

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM