我正在运行一个搜索数组值的查询.我找到了一个关于如何在Stackoverflow上执行此操作的解决方案,但是,它似乎没有给出我期望的输出.以下是例子,你能告诉我出错的地方吗:
我有一个名为departments的列的表,一些示例行包含如下值:
1: 2,4
2: 1,7,2,8,9,4
3: 4, 2
Run Code Online (Sandbox Code Playgroud)
我对此运行查询:
SELECT * FROM udf_multi_value WHERE udfdefid = '1' AND department IN ( 1, 7, 2, 8, 9, 4 );
Run Code Online (Sandbox Code Playgroud)
这将返回结果中的所有行,这正是我所期望的.但是,当我跑:
SELECT * FROM udf_multi_value WHERE udfdefid = '1' AND department IN ( 2, 4 )
Run Code Online (Sandbox Code Playgroud)
它只返回第1行和第3行.由于2和4都在所有行中,我认为它应该返回第2行.
任何帮助非常感谢.
这些单个字段是否以逗号分隔值?如果是这样,那么你就会得到预期的行为.你传递的整数2和4,和他们比较反对CHAR/VARCHAR领域,如
if (2 == '2,4')
and
if (4 == '2,4')
Run Code Online (Sandbox Code Playgroud)
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))
Run Code Online (Sandbox Code Playgroud)