排除字符串中的结果


Exclude results that are in a string

我正在经历咖啡因缺乏发作。。。

如果我有一串数字

$myStr = '100, 102, 204';

如何从mySQL数据库中选择id值与字符串中某个id值不匹配的结果?

SELECT * FROM t1 
WHERE t1.id NOT IN ($myStr)

这看起来不太对劲。。。

您的代码完全正确。

如果您只是从一个表中选择,那么id而不是t1.id就足够了。

我猜您引用的是完整的子句:

SELECT * FROM t1 
WHERE t1.id NOT IN ('100, 102, 204')

你需要这个:

SELECT * FROM t1 
WHERE t1.id NOT IN (100, 102, 204)

SQL IN子句不允许单个变量表示值列表。按原样,查询只能作为动态SQL在任何数据库上运行。

一个特定于MySQL但限制较少的替代方法是使用FIND_IN_SET函数:

SELECT t.*
  FROM T1 t
 WHERE FIND_IN_SET(t.id, $myStr) = 0

FIND_IN_SET文档:

如果str不在strlist中或strlist为空字符串,则返回0。如果任一参数为NULL,则返回NULL。如果第一个参数包含逗号(",")字符,则此函数无法正常工作。