【问题标题】:Why doesn’t my query deliver singular results?为什么我的查询没有提供单一的结果?
【发布时间】:2020-03-19 07:29:24
【问题描述】:

我对@9​​87654322@ 和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

【问题讨论】:

    标签: sql ruby-on-rails join tags


    【解决方案1】:

    解决方案是在 SQL Query 之后使用不是一个而是 连接表上的两个连接。我不知道这有什么实质性的区别,但显然对于数据库来说它确实是一个,甚至如果它可以匹配带有单个 join 的标签的文章。

    SELECT  
    `articles`.*
    FROM `articles`
    JOIN `taggings` 
    ON `articles`.`id` = `taggings`.`taggable_id` 
    JOIN `tags` ON `taggings`.`taggable_id` = `tags`.id 
    WHERE `tags`.`id` in (1,2,3) 
    GROUP BY `articles`.id 
    HAVING( COUNT(`tags`.`id`) = 3);
    

    这样,当你有两篇文章,article-one 和 article-2,其中 article-one 匹配 tag1、tag2、tag3 和 article-2 也匹配 tag1、tag2、tag3 和超过该 tag4,查询只返回 article -一。连词是“this”and“nothing more”而不是or

    你的

    vonSpotz

    【讨论】:

      猜你喜欢
      • 2015-05-04
      • 2011-11-07
      • 2016-08-06
      • 1970-01-01
      • 1970-01-01
      • 2018-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多