2016-10-21 12 views
1

私はこのMySQLの検索

products_table 
     ID | code | product_variants_id | product_name | variants  | variants_value 
     1 |  1| 123451    | beer cake | color  | blue 
     2 |  1| 123451    | beer cake | temperature | hot 
     3 |  1| 123451    | beer cake | weight  | 0.5 
     4 |  2| 123453    | ad wrap  | color  | green 
     5 |  2| 123453    | ad wrap  | weight  | 1 

ようになりますテーブルを持っている私は、それぞれのバリエーションを持つ製品のためのユニークな行を取得するには、以下のクエリを実行しました。

SELECT xx.code, GROUP_CONCAT(concat(xx.variants,':',xx.variants_value)) 
AS variants_and_values, xx.product_name, xx.product_variants_id 
FROM products_table xx 
GROUP BY xx.product_variants_id, xx.product_name, xx.code 

以下の表は、私は単に、このテーブルを実行し、製品を表示することができる上記query.Nowの結果として得られます。

 code | product_variants_id | product_name | variants_and_values     
     1 | 123451    | beer cake | color:blue,temperature:hot,weight:0.5 
     2 | 123453    | ad wrap  | color:green,weight:1 

今、本当の問題は、私は上記の表を検索すると、私はそれを行うつもりのですかhot、とバリアントを持つ製品のみを表示した場合、ということでしょうか?ホット% `:

答えて

1
select * from t where variants like '%:hot' or variants like '%:hot,%' 
+0

、それは簡単なことではないでしょう試してみてください? –

+1

本文は** hotio **ですか? ** hot **はプレフィックス –

+0

として十分無視してください。私の友人。 –

1

は`%を書き込むために、これは1

SELECT T.* 
FROM(
SELECT xx.code, GROUP_CONCAT(concat(xx.variants,':',xx.variants_value)) 
AS variants_and_values, xx.product_name, xx.product_variants_id 
FROM products_table xx 
GROUP BY xx.product_variants_id, xx.product_name, xx.code 
) T 
WHERE T.variants_and_values LIKE '%:hot' OR T.variants_and_values LIKE '%:hot,' 
0
SELECT xx.code, GROUP_CONCAT(concat(xx.variants,':',xx.variants_value)) 
AS variants_and_values, xx.product_name, xx.product_variants_id 
FROM products_table xx 
WHERE (xx.variants = 'temperature' AND xx.variants_value = 'hot') 
GROUP BY xx.product_variants_id, xx.product_name, xx.code