如何关联discussions与votes表 查询时填充likeByMe布尔值
实现方案
有两种常用的高效写法可以实现需求,你可以根据自己使用的数据库和实际业务场景选择:
方案1:EXISTS子查询(更推荐,性能更优,无需处理关联重复问题)
大部分主流数据库(MySQL、PostgreSQL、SQLite等)都支持直接将EXISTS的结果作为布尔值返回,写法最简洁:
SELECT d.*, EXISTS ( SELECT 1 FROM votes v WHERE v.parentId = d.id AND v.userId = @current_user_id -- 如果votes表有点赞/点踩等类型区分,这里可以加额外条件:AND v.type = 'like' ) AS likeByMe FROM discussions d
你只需要把@current_user_id替换为实际查询的指定用户ID即可。
方案2:LEFT JOIN关联查询
如果需要同时拉取votes表的其他关联字段可以用这种写法,注意用户过滤条件要写在JOIN的ON子句中,不能写在WHERE里,否则会过滤掉没有被当前用户点赞的讨论记录:
SELECT d.*, CASE WHEN v.id IS NOT NULL THEN TRUE ELSE FALSE END AS likeByMe -- 如果是MySQL也可以简化写:IF(v.id IS NOT NULL, TRUE, FALSE) AS likeByMe FROM discussions d LEFT JOIN votes v ON v.parentId = d.id AND v.userId = @current_user_id -- 同样可加类型过滤条件:AND v.type = 'like'
内容的提问来源于stack exchange,提问作者mohammad reza shabani
相关产品推荐
相关产品推荐

