难以跨多个表构建联接查询

时间:2012-05-30 14:12:47

标签: mysql

我目前正试图了解我想要做的MySQL查询。很可能我只是没有清楚地思考,因为我没有睡觉,但我已经有点坚持了一段时间。

我正在尝试构建一个查询,以返回我网站上的用户有权访问的所有附件。每个附件都有owner_id与之关联,还有一些组通过attachments表链接到groups_attachments表。

所以我的表是:

+--------------------+
| attachments        |
| groups             |
| groups_attachments |
| users              |
| users_attachments  |
| users_groups       |
+--------------------+

附件,组和用户都有自己的ID,链接表中包含要链接的每个表的ID。

如果attachment.owner_idusers.user_id匹配或users.user_id位于users_attachments(当所有者专门授予权限时)或者users.user_id,则我想从附件中选择所有字段如果通过users_groups与附件相关的论坛users_attachments位于{{1}}。

1 个答案:

答案 0 :(得分:1)

不要尝试使用一个魔术查询来完成所有操作 - 使用一起联合的一系列查询:

select *
from attachments
where owner_id = $userid
union
select a.*
from users_attachments ua
join attachments a on a.attachment_id = ua.attachment_id
where ua.user_id = $userid
union
select a.*
from users u
join groups_attachments ga on ga.group_id = u.group_id
join attachments a on a.attachment_id = ga.attachment_id
where users.user_id = $userid

$userid替换目标用户ID(有三个地方你必须这样做)。

此查询应该可以很好地执行。我编写了表格选择顺序并仔细加入以提供良好的性能。

你还没有说出你的专栏名称是什么,所以我做了合理的猜测。