2011-09-16 26 views
0

我在我的MySQL表中有一列。列名是「attached_products」,現在,例如,我在那裏有一些記錄,並且attached_products的值爲「1,16,164,1645」,如何選擇所有帶有「16」的記錄?如何在逗號分隔字符串中選擇一個數字?

我試圖在where子句中,它去像:

select * from websites where attached_products like '%16%' 

,但它也有164個21645.

感謝所有幫助選擇的記錄! :)

+0

這是一個多對一的關係 - 你需要一個表來關聯e所附產品與本表中的物品相關。 @Mhaihai有你的答案。 –

回答

6

您你可以使用的數據庫,如你所說:

SELECT * FROM `websites` WHERE (`attached_products` LIKE '%,16,%' OR `attached_products` LIKE '16,%' OR `attached_products` LIKE '%,16' OR `attached_products`='16'); 

但你應該考慮重新設計你的數據庫更容易選擇。您可以添加另一個表,只有那些附加產品,如:

table 1 
id | etc ... | etc .... | 

attached_products 
id | id_product | product 

其中id_product從表1和產品是產品ID

+0

是的,我認爲你是對的,我是這個系統的新開發者。我正在考慮重新設計數據庫。 – Mico

+0

...或者'attached_products' ='16' –

+0

@Phil Wallach謝謝...你是對的:) –

0

你可以嘗試select * from websites where attached_products like '%,16,%'

一個更好的解決辦法是,因爲使用的是一個糟糕的設計,以創建一個新表來存儲這種關係(包含產品和附屬產品ID)

0

試試這個

WHERE FIND_IN_SET('16', attached_products);

+0

它會影響應用性能嗎? – Mico

+0

你可以做一些測試,無論如何,最好重新設計db。 – xdazz

0

SELECT * FROM網站在哪裏(select substr(attached_products,','))= 16。但好的解決方案是重新設計

相關問題