3

現在、実行したいMySQLクエリについて頭を悩ませようとしています。寝ていないので、はっきりと考えていないだけかもしれませんが、しばらくこれに固執していました.

サイトのユーザーがアクセスできるすべての添付ファイルを返すクエリを作成しようとしています。すべてのアタッチメントには がowner_id関連付けられており、attachmentsテーブルを介してgroups_attachmentsテーブルにリンクされているグループもあります。

だから私のテーブルは次のとおりです。

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

添付ファイル、グループ、およびユーザーはすべて独自の ID を持ち、リンク テーブルはリンクされている各テーブルの ID を保持します。

attachment.owner_idが a に一致する場合、users.user_idまたはusers.user_idにある場合users_attachments(所有者が具体的に許可を与えた場合)、またはを介し​​て添付ファイルに関連するグループに含まれるusers.user_id場合、添付ファイルからすべてのフィールドを選択したいと考えています。users_groupsusers_attachments

4

1 に答える 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 を置き換えます (これを行う必要がある場所が 3 つあります)。

このクエリはかなりうまく機能するはずです。テーブルの選択順序と結合を慎重にコーディングして、パフォーマンスを向上させました。

列名が何であるかを言っていないので、合理的な推測をしました。

于 2012-05-30T14:27:11.120 に答える