【发布时间】:2015-03-11 01:51:57
【问题描述】:
为什么我的查询只返回了 34 条记录,却有超过 300 条记录要返回?
查询 1:
2.1.5 :109 > Refinery::BeerBrands::BeerBrand.all.count
(0.5ms) SELECT COUNT(*) FROM `refinery_beer_brands`
=> 34
查询 2:
2.1.5 :106 > Refinery::BeerBrands::BeerBrand.joins(:brewery).count
(0.2ms) SELECT COUNT(*) FROM `refinery_beer_brands` brewery
=> 34
查询 3:
2.1.5 :112 > ::Refinery::Breweries::Brewery.all.count
(0.3ms) SELECT COUNT(*) FROM `refinery_breweries`
=> 303
查询 4:
2.1.5 :111 > ::Refinery::Breweries::Brewery.joins(:beer_brands).count
(1.0ms) SELECT COUNT(*) FROM `refinery_breweries` INNER JOIN `refinery_beer_brands` ON `refinery_beer_brands`.`brewery_id` = `refinery_breweries`.`id`
=> 34
查询 5:
2.1.5 :126 > ::Refinery::Breweries::Brewery.joins(:beer_brands).where(:refinery_beer_brands => { beer_type: [0,1,2,3,4,5] } ).count
(1.1ms) SELECT COUNT(*) FROM `refinery_breweries` INNER JOIN `refinery_beer_brands` ON `refinery_beer_brands`.`brewery_id` = `refinery_breweries`.`id` WHERE `refinery_beer_brands`.`beer_type` IN (0, 1, 2, 3, 4, 5)
=> 34
为什么“查询 5”只返回 34 条记录?所有“beer_brands”都必须选择“beer_type”,并且它位于 db 编号 0-5 中。我想返回 303 条记录。每个啤酒厂都有很多 beer_brands。
啤酒厂型号:
has_many :beer_brands, :class_name => '::Refinery::BeerBrands::BeerBrand'
啤酒品牌型号:
belongs_to :brewery,:class_name => '::Refinery::Breweries::Brewery'
如何获取所有具有相似查询的 304 条记录?我想在查询中过滤具有不同数组的记录。
//编辑 16.3.2015:
好吧,你是对的......但我还有另一个问题。这个案子怎么办: 1) 啤酒厂可以有啤酒品牌,但不是必须的 2) 我想在啤酒厂标题或其相关啤酒品牌标题中进行全文搜索
现在我的查询看起来像:
out.includes(:beer_brands).where("refinery_breweries.title LIKE ? OR refinery_beer_brands.title LIKE ?", "%#{pars[:query]}%", "%#{pars[:query]}%")"
现在它抛出错误:
Unknown column 'refinery_beer_brands' in 'where clause'
【问题讨论】:
-
我不明白为什么你会认为添加一个额外的
where子句会突然产生更多条记录。如果您在第一个查询中获得 34 个结果,那么添加where永远不会比原始无限制的 34 个结果更多。where子句是限制性的。它们过滤掉 0 条或更多条本来会被选中的记录。如果我说“给我展示所有红色汽车”,然后我得到 10 个结果,然后我说“给我展示所有有四门的红色汽车”,那么将不会有 更多 辆汽车适合这个新的附加标准。 -
当然...我想在结果中表明我的意思。
标签: mysql ruby-on-rails ruby refinerycms