2012-06-28 79 views
3

這裏就是我想:MySQL:是否可以對多行​​進行group_concat?

attribute_name attribute_id attribute_value 
-------------------------------------------------------------------- 
Appliances  16, 17, 18, 19 Washer, Dryer, Dishwasher, Microwave 
Consoles  7, 3   PS3, XBox 

這裏是靠近我的本錢:

attribute_name attribute_id attribute_value 
------------------------------------------------- 
Appliances  16    Washer 
Appliances  17    Dryer 
Appliances  18    Dishwasher 
Appliances  19    Microwave 
Consoles  7    PS3 
Consoles  3    XBox 

...從此查詢:

SELECT  a.name AS attribute_name, 

      av.attribute_value_id, av.value AS attribute_value 

    FROM  attribute_value av 

    INNER JOIN attribute a 

       ON av.attribute_id = a.attribute_id 

    WHERE  av.attribute_value_id IN 

       (SELECT attribute_value_id 

       FROM property_attribute 

       WHERE property_id = 1) 

    ORDER BY a.name; 

我沒有成功與GROUP_CONCAT。我甚至不知道我想要什麼是可能的。

+0

請出示你實際上是具有一個問題編碼 - GROUP_CONCAT代碼。 –

回答

6

現有查詢將返回你需要的一切產生級聯列。如果您在包裹子查詢現有查詢,您可以GROUP_CONCAT()列和GROUP BY attribute_name

SELECT 
    attribute_name, 
    GROUP_CONCAT(attribute_value_id) AS attribute_value_ids, 
    GROUP_CONCAT(attribute_value) AS attribute_values 
FROM (
    /* Wrap the body of your existing query in a subselect */ 
    SELECT 
    a.name AS attribute_name, 
    av.attribute_value_id, 
    av.value AS attribute_value 
    FROM 
    attribute_value av 
    INNER JOIN attribute a 
     ON av.attribute_id = a.attribute_id 
    WHERE  
    av.attribute_value_id IN 
       (SELECT attribute_value_id 
       FROM property_attribute 
       WHERE property_id = 1) 
) attr_groups 
GROUP BY attribute_name 
ORDER BY attribute_name; 
+0

這真是太棒了@Michael。謝謝你,我今天學到了新東西。 –

+0

如果你的第一個'GROUP_CONCAT'的值比你的第二個值多,你的第二個將會以重複結束。在GROUP_CONCAT中添加「DISTINCT」關鍵字,以確保您不會重複。 –

2
SELECT group_concat(a.name, av.attribute_value_id, av.value) 
相關問題