应用程序目标
通过GCM将零售商的信息发送给移动注册客户
DB体系结构
我有一个customers表和一个相关的customers_realtions表,其中包含以下字段:id、customerID、retailerID、isBlocked
必需的结果
客户可以为特定零售商注册,也可以注册通配符(所有这些)。
在为所有零售商注册的情况下,他可以选择阻止某一特定零售商发送未来消息,从而有效地创建一个黑名单。
每个状态的DB值
retailerID。retailerID等于1。isBlocked字段被更新为1之前注册了这个特定的零售商(真)
如果他在为该零售商创建新行之前向所有零售商注册,并且isBlocked设置为1 (true)挑战
在发送消息时,SELECT查询应该包括具有retailerID为1的客户,并且在isBlocked =1时没有发送retailerID。
例如,在这种情况下
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的单个客户工作的,但我很难找到一种为多个客户编写类似查询的方法。
发布于 2013-08-03 19:50:33
我认为这是一个聚合查询。您希望查看未为客户阻塞的所有行,并确定零售商111是否可用或所有零售商可用:
SELECT customerId
FROM customers_relations cr
WHERE isBlocked = false
GROUP BY customerId
HAVING MAX(retailId = 111) > 0 OR
MAX(retailId = 1) > 0;我注意到,您的问题实际上是说,当有人被阻塞时,将在customer_relations中创建一个新行。以上假设只有一行。若要处理任何行上的块会导致块的情况,请执行以下操作:
SELECT customerId
FROM customers_relations cr
GROUP BY customerId
HAVING (MAX(retailId = 111) > 0 OR
MAX(retailId = 1) > 0
) AND
MAX(retailId = 111 AND isblocked = true) = 0;https://stackoverflow.com/questions/18036630
复制相似问题