我有一个字段“locations”,其中包含1,4,7,8等格式的值。
我想排除包含特定值的行。例如:$location = 4;
我试过了:SELECT * FROM users WHERE FIND_IN_SET($location, locations) = 0
还尝试了一些与IN ..!IN的组合但是再没有结果。有什么建议吗?
谢谢
答案 0 :(得分:0)
SELECT * FROM users WHERE FIND_IN_SET($ location,locations)!= 0
答案 1 :(得分:0)
正如John Woo所指出的,您的查询必须有效。如果不是,则locations
中的数据可能包含逗号前带空格的值,例如:1,4 ,7,8
。在这种情况下FIND_IN_SET
isn't working as expected。所以你可以尝试:
SELECT * FROM users WHERE NOT(locations REGEXP '[[:<:]]$location[[:>:]]')
[[:<:]], [[:>:]]
stand for word boundaries,因此[[:<:]]4[[:>:]]
将匹配列表中的4
,但不会匹配14
。
测试并查看SQL Fiddle
上的差异