我对group by
和having
加count
有以下查询。它仅应返回具有group by
子句中指定的列且具有having count x
指定的计数的行。
我认为以下查询应该是正确的:
@articles = Article.joins(:taggings)
.where(taggings: { tag_id: @article_tags_ids, taggable_type: "Article"})
.group('articles.id')
.having("count(taggings.tag_id) = ?", @article_tags_count)
在这种情况下,它应该只返回那些文章,这些文章具有用户搜索的那些标签以及与之完全相同的标签,而不再是。
模式来自本教程:https://cobwwweb.com/rails-has-many-through-polymorphic-association
它创建此SQL
SELECT
`articles`.*
FROM
`articles`
INNER JOIN `taggings`
ON `taggings`.`taggable_id` = `articles`.`id`
AND `taggings`.`taggable_type` = 'Article'
WHERE
`taggings`.`tag_id` IN (1, 3)
AND `taggings`.`taggable_type` = 'Article'
GROUP BY
articles.id
HAVING
(count(taggings.tag_id) = 2)
LIMIT 11
我有以下分组查询并具有加号。它仅应返回具有在group by子句中指定的列且其计数由count x指定的行。我认为...
该解决方案是在SQL查询之后使用联接表上的一个联接,而不是两个联接。我不知道这有什么实质性的区别,但是很明显,即使它已经可以将带有标签的文章与带有单个join
的文章匹配,它也确实对数据库有所帮助。