2016-11-30 17 views
0

私はカテゴリと呼ばれるmysqlカラムを持っています。私はこれが行を返す値2特定の値がmysqlカラムに存在するかどうか確認してください。

$query = "SELECT * FROM my_table WHERE categories LIKE '2'"; 
$rows = mysql_query($query); 

を含むすべての行を取得しよう...

を1または2または1,2,3または2,12:それはこのような単一または複数の値を含めることができます列が値2を持ち、1,2,3または2,12しかない場合。どのように私は値2を含むすべての行を得ることができますか?

+1

使用 - >あなたのクエリで '%2%' – jitendrapurohit

+0

http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database -column-really-that-bad/3653574 – e4c5

+0

'find_in_set'(' 2 '、categories) 'のような' find_in_set'関数です。 – Blank

答えて

0

次のいずれかを使用することができます。

%それはなど、2のいずれかの側には何も21,2と一致しますので、ワイルドカードです。問題は、それが代わりにあなたが値のカンマ区切りリストを期待find_in_set MySQLの機能を考慮すべきである21、22、など

$query = "SELECT * FROM my_table WHERE categories LIKE '%2%'"; 

に一致する可能性があります。

$query = "SELECT * FROM my_table WHERE find_in_set('2', `categories`)"; 
+0

find_in_setが動作します。ありがとう! :) – Jqrp

0

@jitendrapurohutが言ったように、あなたは

$query = "SELECT * FROM my_table WHERE categories LIKE '%2%'"; 
$rows = mysql_query($query); 

を使用してそれを行う。しかし、このようなコレクションを格納するために本当に悪いですができます。良好aproachは次の通りである:

  1. カテゴリ(ID_C、名前)=>表各カテゴリに
  2. MY_TABLE(id_m [、...])
  3. categories_my_table(ID_C、id_m)

その後、このクエリを使用します。

SELECT * 
FROM my_table m 
INNER JOIN categories_my_table cm ON m.id_m = cm.id_m 
INNER JOIN categories c ON cm.id_c = c.id_c 
WHERE 
c.id_c = 2; 

EDIT:コレクションLを格納するために悪いですなぜ e4c5 @リンクは説明しますIKEこの...

-1
SELECT * FROM my_table WHERE categories LIKE '%2%' AND categories!='1,2,3' AND categories!='2,12'; 
+0

こんにちは、@Jqrpこのクエリを試してください – Singh

+0

これはうまくいきません。たとえば、カテゴリが '23'や '102'のような行が含まれていますが、そのような行は望ましくありません。 –

関連する問題