1

これはおそらく簡単な答えですが、私は過去数日間この問題に取り組んできました。

多対多の関係を持つデータベースがあります

------------- --------------------- ---------------- ---
|画像 | |user2img | |ユーザー |
------------- --------------------- ---------------- ---
|imgID | |ID | |ユーザーID |
|imgURL | |imgID | |ユーザー名 |
|imgAv | |ユーザーID | |ユーザーの電子メール |
------------- --------------------- ---------------- ---

user2img テーブルは、ユーザーが表示できる画像を示します。

すべての画像を (1 回は繰り返さずに) リストし、指定されたユーザーがその画像を見る権利を持っているかどうかを教えてくれる SQL クエリを決定しようとしています。

したがって、次のような出力

(WHERE ユーザー ID = '1')

----------------------------
|imgID | imgURL | アクセス |
----------------------------
|1 | xxx | はい |
|2 | yyy | yyy | いいえ |
|3 | qqq | はい |
|4 | うーん | はい |
|5 | www | いいえ |
|6 | sss | はい |
 等...
----------------------------

ありがとう、

4

1 に答える 1

0

1つの可能性は(おそらく最善ではなく、おそらくあまり効率的ではないことを認めます)、複合キーテーブルに対する内部結合を使用してユーザーの一致するすべての画像を選択し、否定された選択で結果をUNIONすることです(iidは私のテストテーブルのimageIdです):

select 
    iid, url, 'yes'
    from user_has_image
    inner join image on user_has_image.iid = image.id
    inner join user on user_has_image.uid = user.id
    where user.id = 1
union
select 
    iid, url, 'no'
    from user_has_image
    inner join image on user_has_image.iid = image.id
    inner join user on user_has_image.uid = user.id
    where user.id <> 1

このSQLFiddle sessionで結果を確認できます。

于 2013-10-28T23:22:50.733 に答える