2014-12-26 99 views
1

我有一個問題,用IN鍵運行查詢返回空。這是我的查詢:帶IN的MySQL查詢返回空

SELECT * FROM `sc_miscellaneous` where discount_for=4 AND stud_id IN (1,2) AND status=1 

此查詢返回正確的結果。但如果我使用IN (2,3)IN (2)意味着零結果。例如。

SELECT * FROM `sc_miscellaneous` where discount_for=4 AND stud_id IN (2,3) AND status=1 

sc_miscellaneous

ID Miscellaneous misc_amount discount discount_for class stud_id    status 
1 5    200  2  4   1 1,2,3,4,5,6,   1 
                  7,8,9,10,11, 
                  12,13,14,15,16, 
                  17,18,19 

2 6    500  2  4   1 1,2,3,4,5,6,7   1 

先謝謝了。

+4

stud_id是什麼類型? –

+0

參考[this](http://stackoverflow.com/questions/10480568/comma-separated-values-in-mysql-in-clause)或[this](http://dba.stackexchange.com/questions/52492/mysql-using-comma-separated-values) –

回答

0

我覺得你stud_id類型是INT使其爲varchar和運行代碼

stud_id(int)---->change to varchar 

你有

in_array() 
+0

stud_id的類型僅爲varchar。 – Krsmoorthi

0

工作,我不認爲你寫你的查詢方式使用IN子句是正確的方法。

請點擊此link

根據該文件,如果stud_id是一個整數,那麼你可以使用IN Clause多個整數檢查。如果stud_id = 1,那麼你可以寫入stud_id IN(1,2,3)。

根據您的要求,您可能必須編寫多個查詢來提取數據並進行比較。

+0

如果將stud_id的類型更改爲int,則表示它如何允許逗號。我喜歡將所有學生ID插入一條記錄中,而不是插入否。的記錄。但是第一個查詢工作正常,問題僅在第二個,如果我們在stud_id列中選擇中心值(除了1),則意味着沒有結果。 – Krsmoorthi

1

更新

使用下面的查詢

SELECT * FROM `sc_miscellaneous` 
WHERE stud_id LIKE '%,2,%' OR stud_id LIKE '%,3,%' 
    OR stud_id LIKE '2,%,' OR stud_id LIKE '3,%' 
    OR stud_id LIKE '%,2' OR stud_id LIKE '%,3' 

當你有VARCHAR逗號分隔的列表。

檢查

1)如果該唯一的號碼是在逗號分隔的列表之間,

2),或者如果是,在開始

3),或者如果它的結尾。

+0

這也將恢復,例如,stud_id = 12或stud_id = 35。如果你要逗號分開(你不應該),那麼逗號需要包含在LIKE中('%,2,%')並且您需要在該列中的值的開始和結束處添加逗號。 – Erik

+0

但是如果我們使用LIKE方式,列有'22,32'表示它也被選中。但我們需要確切的結果。 - 感謝 – Krsmoorthi

+0

@ user1059687,是的,得到了​​點,我會更新ans。不久。 –