我正在经历咖啡因缺乏发作。。。
如果我有一串数字
$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。如果第一个参数包含逗号(",")字符,则此函数无法正常工作。