【发布时间】:2011-06-10 12:48:18
【问题描述】:
我的数据库中有模型(表),表和字段名称类似于
tags (id, name)
taggings (id, tag_id, taggable_id, taggable_type, context)
employment_histories (id, user_id, grades, subjects, my_interests )
users (id)
taggable_id 实际上是 employment_histories_id,上下文可以是成绩或科目或我的兴趣
现在我有了标签数组,例如g={"9th","10th"} 我想获取用户,只有其标签都与上面的 g 数组匹配。
我已经写了下面的查询:
SELECT DISTINCT users.* FROM `users`
LEFT OUTER JOIN `employment_histories`
ON `employment_histories`.`user_id` = `users`.`id`
LEFT OUTER JOIN `taggings`
ON `employment_histories`.`id` = `taggings`.`taggable_id`
AND `taggings`.`taggable_type` = 'EmploymentHistory'
LEFT OUTER JOIN `tags` ON taggings.context = 'subjects'
WHERE tags.name='9th' OR tags.name='10th'
但它也给了我那些匹配任何标签的用户,但是我希望它只返回匹配所有两个标签的用户
假设标签第 9 和第 10 的标签 id 为 9 和 10,那么我想要它只返回 taggable_id(即就业历史.id),这两个 tag_id(即 9 和 10)在标签中具有共同的 taggable_id表
例如,我有两个用户 tariq 和 kamal,这两个用户都有第 9 个标签,但 kamal 没有第 10 个标签,所以想要查询如果通过这两个标签应该只返回 tariq,其标签都是 macthing 这两个标签,但用户像匹配任何标签的 kamal 也应该被过滤掉
【问题讨论】:
标签: mysql ruby-on-rails-3