2011-01-13 5 views
0

私はカテゴリIDのリストをコンマで区切って格納しています:Mysqlの使用IN

このように:1,2,3,4,5,6,7,8 ..とそうそのIDだけで

次に、IDが2,3のカテゴリを持つすべての行を取得するためのクエリを実行しています。これは、パッケージのリストに項目が少ない場合に機能します。

これはクエリとテーブルです:

mysql> select * from packages where category_id IN (2,3); 

どれソリューションctegory IDが含まれているパッケージの一覧を取得するためのいずれかのこれはあなたに答える必要があり、2または3

答えて

0

質問:

select * from packages where category_id LIKE "2" or category_id LIKE "3";

ただし、データを非正規化する方がよい場合があります。

0
ため

悪いアイデア

あなたはデータを正規化し、この

mysql> create table the_in (expr varchar(255)); 
Query OK, 0 rows affected (0.00 sec) 

mysql> insert into the_in values('1,2'); 
Query OK, 1 row affected (0.00 sec) 

mysql> create table some_table (id int(10)); 
Query OK, 0 rows affected (0.00 sec) 

mysql> insert into some_table values (1), (2), (3), (4); 
Query OK, 4 rows affected (0.00 sec) 
Records: 4 Duplicates: 0 Warnings: 0 

mysql> select * from some_table 
where find_in_set(id, (select expr from the_in)); 
+------+ 
| id | 
+------+ 
| 1 | 
| 2 | 
+------+ 
2 rows in set (0.00 sec)

find_in_setため

一つの可能​​な解決策必要がありますデ正常化 - パフォーマンスに注意してください

関連する問題