2016-10-21 3 views
1

Ich habe eine Tabelle, die so etwas wie diesemySQL Suche in concated Spalten

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 

ich die untene Abfrage eindeutige Zeilen für Produkte mit den jeweiligen Varianten zu bekommen lief aussieht.

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 

Die folgende Tabelle ist als Ergebnis der oben query.Now erhalten, ich kann einfach durch diese Tabelle ausführen und die Produkte angezeigt werden soll. Jetzt

 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 

die eigentliche Frage ist, dass, wenn ich durch die obige Tabelle suchen und nur die Produkte mit der Variante als hot, um anzuzeigen, wie soll ich jetzt tun?

Antwort

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

wäre es nicht einfach sein, '% zu schreiben: hot%'? –

+1

Und der Text ist ** hotio **? Sie sollten ** hot ** als Präfix ignorieren –

+0

fair genug, mein Freund. –

1

Versuchen Sie dieses

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