アプリの目標
GCM 経由で小売業者から登録済みの顧客にモバイルでメッセージを送信する
DB アーキテクチャ
次のフィールドを持つテーブルと関連テーブルがありますcustomers
: 、、、customers_realtions
id
customerID
retailerID
isBlocked
必要な結果
顧客は、特定の小売業者またはワイルドカード (すべて) に登録できます。
すべての小売業者に登録する場合、特定の小売業者が今後メッセージを送信するのをブロックするオプションがあり、効果的にブラックリストを作成します.
各ステータスの DB 値
- 顧客が単一の小売業者に登録する
retailerID
と、小売業者 ID が割り当てられます。 - すべての小売業者の顧客登録数
retailerID
が 1 の場合。 顧客が小売業者をブロックする場合、2 つのオプションがあります。
を。
isBlocked
フィールドが 1 に更新される前に、この特定の小売業者に登録した場合(true)b. この小売業者に対して新しい行が作成される前にすべての小売業者に登録し、
isBlocked
1 (true) に設定されている場合
チャレンジ
メッセージを送信するとき、SELECT クエリには、retailerID が 1 で、1 に等しい場合に送信していない顧客を含める必要があります。retailerID
isBlocked
たとえば、この状況では
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 人の顧客に対しては機能していますが、複数の顧客に対して同様のクエリを作成する方法を見つけるのに苦労しています。