2016-09-13 7 views
0

A SQL表は名前のフィールドにのみ1つのワードを含む: - 例えば、このフィールドの値は、異なる色の列とすることができるSQLのような選択 -

image_colors 

green red blue white 

を私は特定の色を検索し、私が使用:

SELECT * 
FROM `gallery_images` 
WHERE `image_colors` LIKE '%green%' 

この場合、値:

green red blue white 

が緑色で選択されます。

質問:

green 
+1

どのRDBMSですか? – Praveen

+0

これはMySQLのようですね。 –

+0

空白文字を含まない値を探しますか?私はあなたが単なる緑以上のものを探していると仮定しています。 – shawnt00

答えて

1

はい、​​に一致する値のみを選択するために、単純な等価比較を使用します:

select * 
from gallery_images 
where image_colors = 'green' 

のみ1 Wordでのみ値を見つけるために、SQLとのことが可能です

注:

  • バッククォートは、あなたの場合には必要ではなく、should be avoided
  • を必要としないとき、あなたはおそらく、あなたのデータを正規化し、より高速な検索を行うためにgallery_imagescolorscolors辞書テーブルとジャンクションテーブルと多対多のためのデータモデルを変更する必要があります
0

てみ

SELECT * 
FROM gallery_images 
WHERE trim(image_colors)= 'green' 
0

を使用するためにあなたの既存のクエリは、単一の単語のために動作します。検索フィールドの単語の値を変更する必要はありません。

もちろん、このクエリはアプリケーションのパフォーマンスを低下させます。

単一の列に複数の値を格納する代わりに、複数の行としてInteger値の形式で色を格納する別のテーブルを作成する方が適しています。

+0

OPは '緑色の単語のみを含む値を検索する必要があります。 –

0

「緑色」の色だけのレコードを使用する場合は、Like演算子を使用しないでください。

select * 
from gallery_images 
where image_colors = 'green'