2016-05-03 101 views
0

我有這樣如何獲取列包含特定的選項和值在MySQL?

表名的表:attribute_table

id option_name_1 option_value_1 option_name_2 option_value_2 
1  color   Red   size  10 
2  color   Blue   size  10 
3  size   12 
4  size   14 
5  size   16    color  yellow 
6  size   18    color  yellow   

結果應該是

size contains: 10, 12, 14, 16, 18 

color contains: Red, Blue, yellow 

我的查詢是

對於大小:

SELECT CASE WHEN option_value_2='' THEN 
option_value_1 ELSE option_value_2 END AS optValue 
FROM option_value_2 WHERE 
(option_name_1='size' OR option_name_2='size') GROUP BY `optValue` 

對於顏色:

SELECT CASE WHEN option_value_2='' THEN 
option_value_1 ELSE option_value_2 END AS optValue 
FROM option_value_2 WHERE 
(option_name_1='size' OR option_name_2='size') GROUP BY `optValue` 

但我沒有得到正確的價值?

有沒有辦法做到這一點?

感謝

回答

1

例如爲:

SELECT option_name 
    , GROUP_CONCAT(DISTINCT option_value ORDER BY CASE WHEN option_name IN('size') THEN option_value + 0 ELSE LENGTH(option_value) END) option_values 
    FROM 
    (SELECT id,option_name_1 option_name,option_value_1 option_value FROM attribute_table 
     UNION 
     SELECT id,option_name_2,option_value_2 FROM attribute_table 
    ) x 
WHERE option_name IS NOT NULL 
GROUP 
    BY option_name; 
+0

謝謝你,這是真棒。我可以計算option_values的行數嗎? – MGM

+0

是的。這似乎相當直接。 – Strawberry

0

試試這個尺寸爲:

select distinct option_value_1 from attribute_table where option_name_1 = 'size' 
UNION ALL 
select distinct option_value_2 from attribute_table where option_name_2 = 'size'; 

同樣可以用於彩色做到這一點。

0

我認爲大小正確的查詢將是:

SELECT distinct coalesce(option_value_1, option_value_2) AS optValue 
FROM attribute_table WHERE 
coalesce(option_name_1,option_name_2) ='size' 

可以這樣做,以及顏色。

相關問題