2013-06-04 2 views
1

Я выполняю запрос, в котором вы ищете значение массива. Я нашел решение, как это сделать в Stackoverflow, однако, похоже, он не дает результат, который я ожидал бы. Вот примеры, вы можете сказать мне, где я неправильно, пожалуйста:В Array не работает как ожидалось

У меня есть таблица со столбцом называется департаментами и некоторые строки примеров содержат значения, как:

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 находятся во всех строках я wuld Аве думал, он должен вернуть строку 2, а также.

Любая помощь очень ценится.

+3

Нормализация таблиц? [Посмотрите на 'FIND_IN_SET'] (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set) – Kermit

+0

Я должен добавить, что все строки имеют значение udfdefid 1, так что это не проблема. – Mediatomcat

+0

SHOW CREATE TABLE udf_multi_value; –

ответ

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, так что совпадения нет.

Вы должны нормализовать таблицу, так что каждый из этих чисел в своей записи в суб-таблицы, или использовать нестандартные функции SQL MySQL find_in_set()

... AND (FIND_IN_SET('2', department) OR FIND_IN_SET('4', department)) 
+0

Да, это может работать. Небольшая функция для создания запроса каждый раз. Я попробую. Благодарю. – Mediatomcat

+0

Awesome. Оно работает. Спасибо за помощь. – Mediatomcat

Смежные вопросы