给定具有列userId
和articleId
的数据库表article_bookmarks
,如果用户将一篇文章加入书签,则生成具有各自ID的表项(userId
、articleId
).
我想检索的用户总数,书签的特定文章给articleId
,连同信息,如果用户(给userId
)也书签该文章.
我的SQL查询目前如下所示:
SELECT COUNT(ar.userId) AS bookmark_count,
EXISTS(SELECT 1 FROM article_bookmarks WHERE articleId=:articleId AND userId=:userId) AS user_bookmarked
FROM article_bookmarks ar
WHERE ar.articleId=:articleId
我的印象是,这个查询并不是最优的,因为两次读出基本上相同的userId
个数据似乎是低效和多余的:一次在"计数"中聚合,另一次由单个userId
使用子 Select 进行过滤.
有没有一种方法可以优化或简化给定的SQL查询(如SELECT COUNT(ar.userId) AS bookmark_count, EXISTS(:userId IN ar.userId) AS user_bookmarked
[...]在有效的SQL中)?