Mysql SQL查询未选择属性

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` =

我有这样的疑问

我指定sheetcat取消订阅,但查询响应为NULL(或空白)? 为什么?

。您需要将
条件分组:

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,%'