我正在运行一个搜索数组值的查询。我找到了一个关于如何在Stackoverflow上执行此操作的解决方案,但是,它似乎没有给出我期望的输出。以下是这些例子,你能告诉我出错的地方吗:
我有一个名为departments的列表,有些示例行包含的值如下:
1: 2,4
2: 1,7,2,8,9,4
3: 4, 2
我对此运行查询:
SELECT * FROM udf_multi_value WHERE udfdefid = '1' AND department IN ( 1, 7, 2, 8, 9, 4 );
这会返回结果中的所有行,这正是我所期望的。但是,当我跑:
SELECT * FROM udf_multi_value WHERE udfdefid = '1' AND department IN ( 2, 4 )
它只返回第1行和第3行。由于2和4在所有行中,我认为它应该返回第2行。
非常感谢任何帮助。
答案 0 :(得分:5)
这些单个字段是否以逗号分隔值?如果是这样,那么你就会得到预期的行为。您传入整数2
和4
,并将它们与char / varchar字段进行比较,例如。
if (2 == '2,4')
and
if (4 == '2,4')
MySQL会将varchar字段转换为int,这意味着2,4
变为int 2
而4,2
变为int 4
,因此匹配成功。
但1,7,2,...
只会投放到1
,因此无法匹配。
您需要对表进行规范化,以使每个数字都在子表中的自己的记录中,或者使用MySQL非标准SQL函数find_in_set()
... AND (FIND_IN_SET('2', department) OR FIND_IN_SET('4', department))