我有这样的查询
fillna
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLCircularRegion *)region
{
}
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLCircularRegion *)region
{
}
我指定sheetcat为Unsubscribed,但查询响应是NULL(或空白)? 为什么呢?
答案 0 :(得分:1)
AND
takes precedence over OR
。您需要对OR
条件进行分组:
SELECT *
FROM `GSheets`
WHERE `sheetcat` = 'Unsubscribed'
AND
( `user` LIKE '%,r00t,%'
OR `user` LIKE 'r00t,%'
OR `user` LIKE '%,r00t'
OR `user` = 'r00t'
)
第二个sheetcat
条件也是多余的,您可以删除NULL
支票。
答案 1 :(得分:1)
将事物列表存储在分隔字符串中时,这是一个问题。糟糕,糟糕,糟糕的数据设计。第一个和主要建议是创建一个新表,每个表一行,每个用户一行。
现在,有时我们会遇到其他人真正糟糕,糟糕,糟糕的设计决策。 MySQL提供find_in_set()
,它可以满足您的需求:
SELECT g.*
FROM `GSheets` g
WHERE `sheetcat` = 'Unsubscribed' AND
FIND_IN_SET('r00t', `user`) > 0;
请注意sheetcat IS NOT NULL
是多余的。 NULL
值将在第一个条件下失败。除非你可能打算:
SELECT g.*
FROM `GSheets` g
WHERE `sheetcat` = 'Unsubscribed' OR
(sheetcat IS NOT NULL AND FIND_IN_SET('r00t', `user`) > 0);
但这不是我对你的意图的第一次猜测。
如果在OR
条件周围加上括号,您的查询也会有效。但即使这样也太复杂了。使用LIKE
的更简单版本是:
WHERE `sheetcat` = 'Unsubscribed' AND
CONCAT(',', `user`, ',') LIKE '%,r00t,%'