3

我目前正在尝试解决我想做的 MySQL 查询。很可能是因为我没有睡觉,所以我只是想不清楚,但我已经有一段时间陷入了困境。

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

所以我的桌子是:

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

附件、组和用户都有自己的 id,链接表包含被链接的每个表的 id。

我想从附件中选择所有字段,如果attachment.owner_id匹配 ausers.user_id或如果users.user_idusers_attachments(当所有者特别授予权限时)或者如果users.user_idusers_groups与附件相关的组中通过users_attachments.

4

1 回答 1

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(您必须在三个地方执行此操作)。

这个查询应该执行得很好。我已经对表格选择顺序进行了编码并仔细连接以提供良好的性能。

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

于 2012-05-30T14:27:11.120 回答