应用目标
通过 GCM 从零售商向注册客户发送消息
数据库架构
我有一个customers
表和一个相关customers_realtions
表,其中包含以下字段:id
, customerID
, retailerID
,isBlocked
要求的结果
客户可以注册特定零售商或通配符(所有这些)。
如果一个人为所有零售商注册,他可以选择阻止特定零售商发送未来的消息,从而有效地创建黑名单。
每个状态的 DB 值
- 当客户注册单个零售商
retailerID
时,会分配给零售商 ID。 - 当所有零售商的客户注册
retailerID
等于 1。 当客户阻止零售商时,有两种选择:
一个。如果他在字段更新为 1 之前注册到此特定零售商
isBlocked
(true)湾。如果他在为此零售商创建新行之前向所有零售商注册并
isBlocked
设置为 1 (true)
挑战
发送消息时,SELECT 查询应包括零售商 ID 为 1 且在等于 1时不发送消息的客户。retailerID
isBlocked
例如,在这种情况下
id customerID retailID isBlocked
129 46 111 1
128 46 1 0
即使retailerID 是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 的单个客户,但我正在努力寻找一种为多个客户编写类似查询的方法。