1

MySQLに5つのテーブルがありますが、これはSQLの問題だと思います

ユーザー

ここに画像の説明を入力してください

ユーザー情報

ここに画像の説明を入力してください

USER_RIGHTS

ここに画像の説明を入力してください

101=正しく読む

102=書き込み権

グループ

ここに画像の説明を入力してください

投稿

ここに画像の説明を入力してください

たとえば、ユーザー2に対して、ユーザー2がそのグループの読み取り権101を持っているユーザーによって作成されたすべての投稿を選択したいと思います。

たとえば、私は3つの投稿があります

投稿1グループ1に投稿投稿2グループ1に投稿投稿3グループ2に投稿投稿4グループ1に投稿

WHERE user2 has 101 right in group 1 ==> SHOW post1 2 3

また

WHERE user2 has 101 right in group 2 ==> SHOW post2

また

WHERE user2 has 101 right in both group 1 and group 2 ==> SHOW post2

私が今まで持っているのは

SELECT * FROM posts
INNER
    JOIN user_info
    ON posts.posted_by = user_info.user_id  
INNER
    JOIN groups
    ON posts.posted_in = groups.group_id
INNER
    JOIN user_rights
    ON user_rights.user_id = user_info.user_id
WHERE user_rights.right = '101' AND user_info.user_id = ".$UserId." ORDER BY id DESC;

このコードは、すべての投稿を2回返します。

4

1 に答える 1

1

これはかなり納得した

select * from posts 
inner join 
(select group from user_rights where right = 101 and user_id = 1) as rights
on posts.posted_in = rights.group

SQLサーバーで動作します(構文を確認するためにここに持っていないでください)。
一方では、ID 1 のユーザーが読み取り権限を持つすべてのグループを
選択し、もう一方では投稿を選択します。
残っているのは、それらの間の内部結合だけです。

于 2012-06-15T19:04:40.757 に答える