栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

HABTM发现带有``ND''个联接,而不是``R''个联接。

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

HABTM发现带有``ND''个联接,而不是``R''个联接。

您可以这样做:

  1. 从您的ModelA构建一个查询,然后(通过连接模型)加入ModelB,过滤出具有您要查找的值之一的ModelB,即将它们放入OR(即

    where ModelB = 'ModelB_1' or ModelB = 'ModelB_2'
    )。 通过此查询,结果集将具有多个“ ModelA”行,对于每个满足的ModelB条件,该行恰好为一行

  2. 在您需要的ModelA列上的查询中按条件添加一组(如果需要,甚至可以将它们全部添加)。每行 的count( )等于满足的ModelB条件数*。

  3. 添加一个“具有”条件,仅选择

    count(*)
    等于您需要满足的ModelB条件数的行

例子:

model_bs_to_find = [100, 200]ModelA.all( :joins=>{:model_a_to_b=>:model_bs},  :group=>"model_as.id",  :select=>"model_as.*", :conditions=>["model_bs.id in (?)", model_bs_to_find],  :having=>"count(*)=#{model_bs_to_find.size}")

注意,以这种方式指定的组和选择参数将在MySQL中工作,这样做的标准SQL方法是将整个model_as列的列表放入组和选择参数中。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/670145.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号