我有三个表/模型。
Recordings (id)
has_many :hits
has_many :tags, :through => :hits
Hits (id, recording_id, tag_id)
belongs_to :recordings
belongs_to :tags
Tags (id)
has_many :hits
has_many :recordings, :through => :hits
我需要找到所有具有作为参数传入的所有标签的录音。例如,查找 tag.id == 5、tag.id == 6 和 tag.id ==7 的所有记录。(虽然,可能是 2 个标签 ID,或 2000 个标签 ID)
我试图通过对数据库的查询来做到这一点,以便它快速而不是带回一个大集合并用 ruby 减少它。
我认为 SQL 查询会像这样:
SELECT * FROM recordings
WHERE id IN (
SELECT recording_id FROM hits
WHERE recording_id IN (
SELECT recording_id FROM hits
WHERE recording_id IN (
SELECT recording_id from hits WHERE recording_id = 5
)
AND tag_id = '6'
)
AND tag_id == '7'
)