2013-11-26 23 views
0

我想使用MYSQL語句IN從我的表中只選擇我需要的數據。例如:我有一個字段,通過逗號分隔的ID保存類別(7,1,10,25,20)。如果我用這個代碼:MYSQL IN語句返回錯誤的數據

SELECT * FROM cancelamento WHERE (motivos_int_id IN (7)) 

我只得到,與7號開始如果來自該行的數據是8,7,14,例如,它不返回任何數據行。即使我將代碼更改爲:

SELECT * FROM cancelamento WHERE (motivos_int_id IN (7,8)) 

我做錯了什麼?我需要獲取數字7的所有數據,例如,不管數字7的順序如何。

+2

1.規範化數據 – Strawberry

+0

@草莓雖然我同意你的觀點,但這並非總是可能。有時只有Genius DataBase Admin™並不需要加入臭味...... – Andre

+0

是的,但這是他們的葬禮。把我算出來! – Strawberry

回答

1

可以使用FIND_IN_SET

SELECT * FROM cancelamento WHERE find_in_set(7 , motivos_int_id) 

一點example here

+0

它的工作:SELECT * FROM cancelamento WHERE FIND_IN_SET(8,motivos_int_id)和FIND_IN_SET(7,motivos_int_id); – Foreba

+0

我認爲這與使用'LIKE'有同樣的警告,也就是說,它不會使用索引。 –

+1

@Foreba是的,如果你想添加8然後使用AND ...你會得到你想要的7和8。好吧,它爲你工作,祝你好運。 –

0

首先打印您的motivos_int_id分開, 檢查您的id的結構它可能是這樣一個(12, 3,4,) 最後有逗號附加,所以如果這個scenerio發生在php 中使用rtrim()函數並修剪右側的逗號,並且您的查詢是正確的。

SELECT * FROM tbl_name其中id IN(1,2,3)