gpt4 book ai didi

sql - HABTM 多 "and"查询

转载 作者:搜寻专家 更新时间:2023-10-30 20:36:17 24 4
gpt4 key购买 nike

我有与 HABTM 关系的文章和标签记录。

我需要使用“and”查询按标签数组过滤文章。

使用下面的标签,我需要所有过期的“Salami”和“Pizza”。

tags = ["Salami", "Pizza", "Expired"]//项目可以是 1..n 中的任意数字

我想出了以下方法,但这会返回所有未过期的“Salami”和“Pizza”。这也会返回所有过期的元素,这些元素不是意大利腊肠也不是比萨

def tags_query
render status: 200, json: Article.includes(:tags).where('tags.name' => params[:tags] )
end

最佳答案

如果您真的想用“and”查询所有标签,您可以这样做:

required_tags = ["Salami", "Pizza", "Expired"]

Article.joins(:tags)
.where(tags: { name: required_tags })
.group('articles.id')
.having('count(*) = ?', required_tags.count)

它的作用是:

  • 获取所有标签包含所需标签之一的文章
  • 将它们分组,例如,当文章具有“意大利腊肠”、“披萨”和“过期”标签时,我们有 3 个一组,或者当文章具有“意大利腊肠”标签时,只有 2 个一组, “披萨”和“鱼”。
  • 然后只选择那些成员数量与我们所需的标签数组中指定的数量相同的组。

关于sql - HABTM 多 "and"查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38124180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com