[英]mysql conditional subquery with joins or case
我有 3 个表Project
、 ProjectLikes
和User
。
当登录用户浏览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
具有列projectid
和userid
。 登录用户的 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.