gpt4 book ai didi

sql - Rails - 返回所有对象的 SQL 查询,这些对象具有所有指定的相关对象(has_many through)

转载 作者:行者123 更新时间:2023-11-29 14:00:47 24 4
gpt4 key购买 nike

这是我的第一个问题。

我想构建一个查询,它将为我提供具有所有指定功能的所有主题。

我有三个模型 Theme、Features 和 ThemeFeatures

主题 has_many :features, :through => :theme_feautures

假设数据库中有一个主题对象(id:1,名称:“theme_a”)。它具有(许多)特征 [(id: 1, name:"feature_a"), (id: 2, name:"feature_b"), (id: 3, name:"feature_c")]

查询应该像这样工作: Theme.the_query(:features => {:id => [1,2]}) ,结果是 Theme ,但是当我这样放置 id 时 Theme.the_query(:features => {:id => [2,4]}) 结果应该是 nil。

我构建了 Theme.joins(:features).where(:features => {:id => features_array_ids}) 但它返回所有具有任何 features_array_ids 元素的主题。如果 features_array_ids = [2,4] 它返回 Theme ,但我不想要那个。

对于语法错误,我很抱歉,我希望你明白我的意思。

编辑:

找到解决方案

Theme.select("*").from("themes").joins("INNER JOIN theme_features ON themes.id = theme_features.id").where("EXISTS(SELECT theme_id FROM theme_features tf WHERE tf.feature_id IN (#{features_array_ids.join(", ")}) AND tf.theme_id = themes.id GROUP BY tf.theme_id HAVING COUNT(*) = #{features_array_ids.count})")

最佳答案

解决方案。

Theme.select("*").from("themes").joins("INNER JOIN theme_features ON themes.id = theme_features.theme_id").where("EXISTS(SELECT theme_id FROM theme_features tf WHERE tf.feature_id IN (#{features_array_ids.join(", ")}) AND tf.theme_id = themes.id GROUP BY tf.theme_id HAVING COUNT(*) = #{features_array_ids.count})")

关于sql - Rails - 返回所有对象的 SQL 查询,这些对象具有所有指定的相关对象(has_many through),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19424120/

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