Mysql SQL查询未选择属性
我有这样的疑问 我指定sheetcat取消订阅,但查询响应为NULL(或空白)? 为什么?。您需要将Mysql SQL查询未选择属性,mysql,sql,Mysql,Sql,我有这样的疑问 我指定sheetcat取消订阅,但查询响应为NULL(或空白)? 为什么?。您需要将或条件分组: SELECT * FROM `GSheets` WHERE `sheetcat` = 'Unsubscribed' AND ( `user` LIKE '%,r00t,%' OR `user` LIKE 'r00t,%' OR `user` LIKE '%,r00t' OR `user` =
或条件分组:
SELECT *
FROM `GSheets`
WHERE `sheetcat` = 'Unsubscribed'
AND
( `user` LIKE '%,r00t,%'
OR `user` LIKE 'r00t,%'
OR `user` LIKE '%,r00t'
OR `user` = 'r00t'
)
第二个sheetcat
条件也是多余的,您可以删除NULL
检查。当您以分隔字符串存储事物列表时,这是一个问题。糟糕,糟糕,糟糕的数据设计。第一个也是主要的建议是创建一个新表,每个工作表一行,每个用户一行
现在,有时我们会被其他人糟糕的设计决策所困扰。MySQL提供了find_in_set()
功能,可满足您的需求:
SELECT g.*
FROM `GSheets` g
WHERE `sheetcat` = 'Unsubscribed' AND
FIND_IN_SET('r00t', `user`) > 0;
请注意,sheetcat不是空的
是冗余的。NULL
值将使第一个条件失败。除非您可能打算:
SELECT g.*
FROM `GSheets` g
WHERE `sheetcat` = 'Unsubscribed' OR
(sheetcat IS NOT NULL AND FIND_IN_SET('r00t', `user`) > 0);
但这不是我第一次猜测你的意图
如果在或
条件周围加上括号,查询也会起作用。但即使这样也太复杂了。使用类似
的更简单的版本是:
WHERE `sheetcat` = 'Unsubscribed' AND
CONCAT(',', `user`, ',') LIKE '%,r00t,%'
在WHERE子句中可能需要一些括号。。。(提示:用户喜欢…)感谢修改我帖子的版主,以及所有其他人帮助我发布更具讽刺意味的内容。
WHERE `sheetcat` = 'Unsubscribed' AND
CONCAT(',', `user`, ',') LIKE '%,r00t,%'