在Array中没有按预期工作

时间:2013-06-04 16:13:31

标签: php mysql

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:5)

这些单个字段是否以逗号分隔值?如果是这样,那么你就会得到预期的行为。您传入整数24,并将它们与char / varchar字段进行比较,例如。

if (2 == '2,4')
and
if (4 == '2,4')

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))