我有两个表publications
和publication_likes
,它们之间存在多对多关系,并且这些字段为:user_id
,pub_id
,created_at
。 / p>
用户拥有个人资料,并在该个人资料上拥有出版物。 当需要特定用户的个人资料时,我需要获取其出版物(这很容易)。我还需要知道登录的用户喜欢其中哪些出版物。
示例:user_a
是个人资料所有者并拥有出版物,user_b
已登录并访问user_a
个人资料。服务器加载user_a
个发布,并告诉user_b
其中user_a
个喜欢的发布
在询问之前,我尝试过思考并找到了解决方案,但我不知道它是否正确
SELECT p.id,
p.user_id as creator,
p.p_content,
CASE WHEN pl.user_id = $1 THEN 1
ELSE 0
END as liked from publications p
LEFT JOIN publications_likes pl on p.id = pl.pub_id
WHERE p.user_id = $2;
请告诉我您是否认为这是正确的,还有其他方法可以做到这一点。
注意:我知道标题不是很具体,但我想不出其他标题。如果您可以做得更好,请随时进行。
答案 0 :(得分:2)
编辑:已更新以反映评论中的说明。
您无需使用CASE
语句即可获得正确的结果集。
SELECT p.id,
p.user_id as creator,
p.p_content,
pl.id IS NOT NULL AS liked
FROM publications p
LEFT JOIN publications_likes pl ON p.id = pl.pub_id AND pl.user_id = $1
WHERE p.user_id = $2;
由于要加入M:N关系的联结表,因此您需要在联接上使用两个条件以确保找到正确的pl
行。否则,您实际上并不真正知道要加入哪个pl
,并且可能最终得到liked
的假阴性。