これは少しややこしい質問かもしれません。誰が投稿を表示できるかを決定する列 Permission を持つユーザー投稿のテーブルがあります: 0 = パブリック、1 = サブスクライバーのみ、2 = 連絡先のみ。
列 Subscriber_ID と Subscribed_to_ID を持つ別のテーブル "subscriptions" と、列 User1_ID と User2_ID を持つさらに別のテーブル "contacts" があります。
複雑な MySQL クエリの経験はあまりありません。通常は基本的なクエリしか必要ありませんが、私がやろうとしていることは次のとおりです。
次の条件下で、posts テーブルから投稿を選択する方法を探しています。
- ユーザーがサブスクライブしておらず、投稿者の連絡先でもない場合は、公開投稿 (許可が 0 のもの) のみを返します。
- ユーザーが投稿の作成者を購読している場合は、0 または 1 のアクセス許可を持つ投稿を返します
- ユーザーが連絡先 (自動的にサブスクライブ) の場合、0、1、または 2 の Permission 値を持つ投稿を返します。
構文が正しくないことはわかっていますが、これはこれを行うための良い方法に少しでも近いですか? また、通常は一度に 1 つのテーブルしか操作しないので、混乱しています。これら 3 つのテーブルを結合する必要がありますか?
SELECT user_id,
*
FROM posts
WHERE privacy < IF (user_id IN(SELECT *
FROM contacts
WHERE user1_id = 'TestUser'
OR user2_id = 'TestUser'), 2,
IF (
user_id IN (SELECT subscribed_to_id
FROM subscriptions
WHERE subscriber_id = 'TestUser')
,
1, 0)
)
繰り返しますが、私は自分が遠く離れていることを知っていますが、私が慣れ親しんでいる基本的なものよりも複雑な MySQL を学びたいので、誰かがこのクエリを改善する方法についてアドバイスをくれれば、私は間違いなく感謝します!