User has_and_belongs_to_many tags
Tag has_and_belongs_to_many users
我正在寻找一种方法,让每个标签2
和5
的用户都有一个查询,最好使用activerecord构建。
我知道我可以做到这一点
users1 = Tag.find(2).users
users2 = Tag.find(5).users
usersFinal = users1 & users2
但是我想获取用户列表并将它们与SQL合并以防止在ruby中合并数组。
编辑:我正在使用mysql2
答案 0 :(得分:1)
您应该使用map方法:
Tag.find([2,5]).map(&:users)
EDIT2
您还可以使用包含:
User.includes(:tags).where(tags: { id: [2,5] })
答案 1 :(得分:1)
假设您有user_tags
表来支持您的多对多关系,我会使用以下SQL
来执行此操作:
SELECT users.id, COUNT(user_tags.tag_id) as tags_count
FROM users
JOIN user_tags ON users.id = user_tags.user_id
WHERE user_tags.tag_id IN (2,5)
GROUP BY users.id
HAVING COUNT(user_tags.tag_id) > 1;
在这里,我们选择带有任何给定标记的users
(eighter 2
或5
),组行,以便每行代表一个用户,并检查"嵌套"行(等于user_tags
表中特定用户的引用计数)。假设你有唯一性验证,保证一对user
和tag
只有一行,那么两个用户都有超过1行"嵌套&# 34; (having COUNT(*) > 1
)。
很抱歉没有能够自己测试,希望能为您提供见解。请参阅HAVING (SQL)函数定义。