博客有“主题”,“主题”有“帖子”。
如何在没有帖子的情况下统计所有主题?所以基本上没有使用的主题。
topics = Topic.all
topics.???
答案 0 :(得分:1)
Topic.includes(:posts).where('posts.topic_id is null').references(:posts).count
在看到其他答案后,我在控制台中运行了两个语句。
此答案生成以下查询
(0.9ms) SELECT COUNT(DISTINCT "topics"."id") FROM "topics" LEFT OUTER JOIN "posts" ON "posts"."topic_id" = "topics"."id" WHERE (posts.topic_id is null)
而另一个答案产生两个查询(显而易见)。
(0.6ms) SELECT "posts"."topic_id" FROM "posts"
(0.5ms) SELECT COUNT(*) FROM "topics" WHERE ("topics"."id" NOT IN (2,3,11,23))
答案 1 :(得分:0)
Topic.where(“id not in?”,Post.pluck(:topic_id))
答案 2 :(得分:0)
您可以使用此查询获取所有主题,而无需任何帖子:
Topic.where.not(id: Post.pluck(:topic_id))