我有这个表设置(简化):
ads
- id
- brand_id
brands
- id
tags
- taggable_type
- taggable_id
- tag
tags 表中的 taggable_type 将是“Ad”或“Brand”,taggable_id 将分别标识 ad_id 或 brand_id,然后 tag 是一个字符串。
广告继承了他们的品牌标签,我正在尝试编写一个搜索查询,为给定的一组标签提取一组广告,其中这些标签属于广告本身或与该广告关联的品牌。
这些表都可能相当大,所以我需要它高效。
这是我所拥有的(这不起作用)
SELECT
a.*
FROM
ads a
JOIN
((
SELECT
*
FROM
tags
WHERE
tag IN ({$tags})
AND taggable_type = "Ad"
) t FULL JOIN (
SELECT
*
FROM
tags
WHERE
tag IN ({$tags})
AND taggable_type = "Brand"
)) tt
ON (t.taggable_id = a.id) OR (tt.taggable_id = a.brand_id);
对于初学者,我在完全加入时遇到错误。我也尝试过内连接和左连接,但仍然无法正常工作。我觉得我只是在做一些根本上愚蠢的事情。有什么帮助吗?