应用目标基于另一行
通过GCM零售商将消息发送到注册用户的移动
DB架构
我有一个customers
表和价值选择行相关customers_realtions
表与下列字段:id
,customerID
, retailerID
,isBlocked
所需取得的成果
客户可以针对特定的零售商登记,或通配符(所有的)。
如果向所有零售商注册,他可以选择阻止特定零售商发送未来消息,从而有效创建黑名单。
对各状态
- DB值。当用于单个零售商
retailerID
客户寄存器被分配与零售商ID。 - 当用户注册的所有零售商
retailerID
的等于1 当顾客块零售商有两种选择:
一个。如果他在
isBlocked
字段更新为1(true)之前注册到此特定零售商b。如果他注册的所有零售商都为这个零售商之前创建一个新的行和
isBlocked
设置为1(真)
挑战
当发送消息的SELECT查询应包括客户拥有的1 retailerID和不已发送retailerID
当isBlocked
等于1
例如,在这种情况下
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
问题
虽然这工作了要选择的客户单身客户,我事先知道身份证,我正在努力想出一种为多个客户编写类似查询的方法。
如果用户多次封锁和取消阻止零售商,会发生什么情况?有多少行被创建? –
显然该行是在用户之前没有注册到该特定零售商时创建的,即,如果他登记了所有零售商。如果他注册了特定的零售商,“isBlocked”的值就会相应更新。 – Matanya
。 。在你对系统工作原理的描述中看第(3)步。它明确指出,当零售商被封锁时会创建一个新行。这就是我问这个问题的原因。我的答案中的第一个查询应该是正确的。 –