我有此表的设置(简体):MySQL的外键多联接
ads
- id
- brand_id
brands
- id
tags
- taggable_type
- taggable_id
- tag
在标签表中的taggable_type值可以是“广告”或“品牌”,在taggable_id将确定ad_id或分别brand_id ,然后标签是一个字符串。
广告继承了他们品牌的标签,并且我正在尝试编写一个搜索查询,为给定的一组标签添加一组广告,其中这些标签属于广告本身或与该广告关联的品牌。
这些表格都可以相当大,所以我需要它是有效的。
这里是我有(这是不工作)
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);
对于初学者来说,我得到的完全错误加入。我也尝试了一个内连接和一个左连接,但它仍然无法工作。我觉得我只是在做一些根本上愚蠢的事情。任何帮助?
你可以发布一些示例数据为每个表,然后查询所需的结果? – Taryn 2013-03-01 21:42:40