0

アプリの目標

GCM 経由で小売業者から登録済みの顧客にモバイルでメッセージを送信する

DB アーキテクチャ

次のフィールドを持つテーブルと関連テーブルがありますcustomers: 、、、customers_realtionsidcustomerIDretailerIDisBlocked

必要な結果

顧客は、特定の小売業者またはワイルドカード (すべて) に登録できます。

すべての小売業者に登録する場合、特定の小売業者が今後メッセージを送信するのをブロックするオプションがあり、効果的にブラックリストを作成します.

各ステータスの DB 値

  1. 顧客が単一の小売業者に登録するretailerIDと、小売業者 ID が割り当てられます。
  2. すべての小売業者の顧客登録数retailerIDが 1 の場合。
  3. 顧客が小売業者をブロックする場合、2 つのオプションがあります。

    を。isBlockedフィールドが 1 に更新される前に、この特定の小売業者に登録した場合(true)

    b. この小売業者に対して新しい行が作成される前にすべての小売業者に登録し、isBlocked1 (true) に設定されている場合

チャレンジ

メッセージを送信するとき、SELECT クエリには、retailerID が 1 で、1 に等しい場合に送信していない顧客を含める必要があります。retailerIDisBlocked

たとえば、この状況では

id  customerID  retailID    isBlocked
129 46          111                 1
128 46          1                   0

小売業者 ID が 111 であっても顧客を選択したくない

私の試み

SELECT * FROM customers_relations 
              WHERE 
                (retailID=111 
              OR 
                (retailID=1
                AND 
                (SELECT isBlocked FROM `customers_relations` WHERE customerID=46 AND retailID=111)=0))
              AND
                NOT isBlocked 

質問

これは、ID を事前に知っている 1 人の顧客に対しては機能していますが、複数の顧客に対して同様のクエリを作成する方法を見つけるのに苦労しています。

4

1 に答える 1