2011-09-16 13 views
0

私は私のMySQLテーブルに列を持っています。列名は「attached_products」です。たとえば、レコードがいくつかあり、attached_productsの値が「1,16,164,1645」の場合、「16」のレコードをすべて選択するにはどうすればよいですか?カンマ区切り文字列で数値を選択する方法は?

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

それはまた、任意のヘルプのための164と21645.

おかげでレコードを選択:

は、私はそれはのようなものを行って、where句を試してみました! :)

+0

これは多対1の関係です - 関係するテーブルが必要です。 eこの表の項目に添付された製品。 @ミハイはあなたの答えを持っています。 –

答えて

6

あなたのために悪いデザインを使用しているので、

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

などですが、簡単に選択できるようにデータベースを再設計することを検討する必要があります。あなたが好きなものだけ取り付けた製品を別のテーブルを追加することができます。id_productは表1および製品からです

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

attached_products 
id | id_product | product 

はウェブサイトからのプロダクトID

+0

あなたは正しいと思います。私はこのシステムの新しい開発者です。私はデータベースを再設計することを考えている。 – Mico

+0

...または 'attached_products' = '16' –

+0

@Phil Wallachありがとう...あなたは正しいです:) –

0

あなたがよりよい解決策は、(製品および付属のプロダクトIDを含む)この関係を格納するための新しいテーブルを作成することですselect * from websites where attached_products like '%,16,%'

を試みることができる

0

この

WHERE FIND_IN_SET('16', attached_products);

+0

それはアプリのパフォーマンスに影響しますか? – Mico

+0

あなたは何らかのテストを行うことができます。とにかく、dbを再設計するのが最善です。 – xdazz

0

選択してください*にありますしかし、良い選択は再設計です

関連する問題