2013-06-04 19 views
1

我正在運行查詢您搜索數組值。我發現了一個解決方案,以便如何在Stackoverflow上執行此操作,但是,它似乎沒有提供我期望的輸出。這裏有例子,你能告訴我在哪裏,我錯了,請:在數組不按預期工作

我有一個表列名爲部門和一些例子行包含類似的值:

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在我貴方覺得AVE認爲應該回到第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

那些是單一領域與逗號分隔值?如果是這樣,那麼你會得到預期的行爲。你傳入整數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)) 
+0

啊,這可以工作。每次構建查詢的一個小函數。我會嘗試一下。謝謝。 – Mediatomcat

+0

太棒了。有用。謝謝您的幫助。 – Mediatomcat