在Array中没有按预期工作

Med*_*cat 1 php mysql

我正在运行一个搜索数组值的查询.我找到了一个关于如何在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行.

任何帮助非常感谢.

Mar*_*c B 5

这些单个字段是否以逗号分隔值?如果是这样,那么你就会得到预期的行为.你传递的整数24,和他们比较反对CHAR/VARCHAR领域,如

if (2 == '2,4')
and
if (4 == '2,4')
Run Code Online (Sandbox Code Playgroud)

MySQL会将varchar字段转换为int,意味着2,4变为int 24,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)