在post查询中获取当前用户

时间:2018-06-17 11:04:32

标签: c# sql sql-server

我有一张存储帖子的表格。我想创建一个查询来检索帖子,如果当前用户喜欢这篇文章。这是我的问题:

select *,CAST(iif(exists(select 1 from Post.PostLike where PostId=ps.Id and UserId=@UserId),1,0) as bit) as IsLiked
from Post.Post ps

有比这更好的查询吗?

1 个答案:

答案 0 :(得分:1)

尝试使用LEFT JOIN

SELECT ps.*,
       convert(bit, CASE
                      WHEN psl.userid IS NULL
                        THEN 0
                      ELSE 1
                    END) isliked
       FROM post.post
            LEFT JOIN post.postlike psl
                      ON ps1.postid = ps.id
                         AND psl.userid = @userid;

然后在post.post.id上创建一个索引(除非它已经存在一个索引,主键列应该是这种情况)和post.postlike.postidpost.postlike.userid上的索引(除非另有除外)这样的索引已经存在,这可能是列是主键的情况,这是合理的。)

CREATE INDEX post_id
             ON post.post
                (id);

CREATE INDEX postlike_postid_userid
             ON post.postlike
                (postid,
                 userid);

或者将最后一个更改为

CREATE INDEX postlike_userid_postid
             ON post.postlike
                (userid,
                 postid);

如果用户多于帖子。

如果索引有帮助,请检查执行计划。