mysql - 你如何在mysql或rails中做到这一点

标签 mysql ruby-on-rails ruby activerecord searchlogic

假设您有一个 posts 表和一个 Tags 表,两者都通过 post_tags 表关联。

所以

帖子有 id/subject/body 列

标签有 ID/名称

post_tags 具有 id/post_id/tag_id

用 Rails 术语来说,我有一个 Post 模型,它通过 AssetTags 有许多标签。

我正在尝试查询具有 2 个特定标签的帖子。 因此,如果有一个 Rails 标签和一个 mysql 标签,我想要一个返回仅包含这两个标签的帖子的查询。

有道理吗?

有什么方法可以使用 activerecord (我正在使用搜索逻辑)或 mysql 来做到这一点吗?

最佳答案

此 SQL 返回包含这两个标签的帖子。

select 
  p.* 
from 
  posts p
  ,asset_tags atg1
  ,asset_tags atg2
  ,tags t1
  ,tags t2
where
  p.id = atg1.post_id
and t1.id = atg1.tag_id
and t1.tag = 'MySQL' 
and p.id = atg2.post_id
and t2.id = atg2.tag_id
and t2.tag = 'Rails'
;

对于通过事件记录执行此操作,另一种方法是查询每个标签,然后查询结果数组以获取两者的交集。

关于mysql - 你如何在mysql或rails中做到这一点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7991288/

相关文章:

php - 需要帮助调整选择查询以将 Match/Against 子句更改为 Like 子句

mysql - Rails 无法识别遗留数据库中的 bool 字段

ruby - 使用每种方法在 Ruby 中排序

ruby - 在 ruby​​ 中读取/写入密码保护和加密文件

sql - 如何在插入语句中使用 Sequel SQL 函数?

javascript - 单击时使用 Jquery 刷新 div

php - Mysql varchar 字段的数字不能很好地排序

mysql - 如何在数据库中随机字母列表的每个字母后添加逗号

ruby-on-rails - Capistrano 'Bundle Not Found' 部署期间出错

ruby-on-rails - 无法从主机访问 docker 容器