我目前正试图了解我想要做的MySQL查询。很可能我只是没有清楚地思考,因为我没有睡觉,但我已经有点坚持了一段时间。
我正在尝试构建一个查询,以返回我网站上的用户有权访问的所有附件。每个附件都有owner_id
与之关联,还有一些组通过attachments
表链接到groups_attachments
表。
所以我的表是:
+--------------------+
| attachments |
| groups |
| groups_attachments |
| users |
| users_attachments |
| users_groups |
+--------------------+
附件,组和用户都有自己的ID,链接表中包含要链接的每个表的ID。
如果attachment.owner_id
与users.user_id
匹配或users.user_id
位于users_attachments
(当所有者专门授予权限时)或者users.user_id
,则我想从附件中选择所有字段如果通过users_groups
与附件相关的论坛users_attachments
位于{{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(有三个地方你必须这样做)。
此查询应该可以很好地执行。我编写了表格选择顺序并仔细加入以提供良好的性能。
你还没有说出你的专栏名称是什么,所以我做了合理的猜测。