0

我在使用 Ruby on Rails 4 在 Squeel 或直接 Active Record 中重写此 SQL 查询时遇到了很多问题。

查询中的所有 3 个数字都需要在执行前传递给查询。SQL查询如下。

SELECT "users".* 
FROM "users"  
WHERE "users"."id" 
IN (SELECT "users"."id" FROM "users"  
INNER JOIN marketing_assets ON users.id = marketing_assets.user_id 
WHERE  marketing_assets.marketing_platform_id= 3 
GROUP BY users.id HAVING COUNT(DISTINCT marketing_assets.marketing_platform_id) = 1)

您可以在 Ruby on Rails 中尝试在控制器中链接类方法时在 Error 中找到有关如何使用它的更多详细信息

4

2 回答 2

0
marketing_assets_id = 3
limit_marketing_assets = 1
User.joins(:marketing_assets).where(:marketing_assets => {:marketing_platform_id => marketing_assets_id}).group(:users => :id).having("COUNT(DISTINCT marketing_assets.marketing_platform_id) = #{limit_marketing_assets}")
于 2014-02-02T11:29:47.850 回答
0

这是我最终使用 Squeel 编写的查询。这个对我有用。

User.where{users.id.in(User.joins{marketing_assets}
.where((['marketing_assets.marketing_platform_id = ?' ] * platforms.count)
.join(' OR '), *platforms).group{users.id}
.having{{marketing_assets => 
{COUNT(DISTINCT(marketing_assets.marketing_platform_id)) => platforms.count }}})}
于 2014-02-03T09:11:50.703 回答