2011-02-09 69 views
0

我有一個返回多行,如下面的MySQL查詢:MySQL的Concat的多行到一行

attribute_name value 
---------------------------------------- 
username   emailuser 
domain   mydomain.com 

我需要的輸出如下:

username  domain 
----------------------------- 
emailuser  mydomain.com 

當前SQL:

SELECT pa2.attribute_name, upa2.value 
     FROM product p 

INNER JOIN product_attribute pa ON p.product_id = pa.product_id 
     AND pa.attribute_name = 'alias' 

INNER JOIN user_product_attribute upa ON pa.product_attribute_id upa.product_attribute_id 

INNER JOIN user_product_attribute upa2 ON upa.user_product_id = upa2.user_product_id 

INNER JOIN product_attribute pa2 ON pa2.product_attribute_id = upa2.product_attribute_id 
    AND pa2.attribute_name 
    IN (
    'username', 'domain' 
    ) 

WHERE p.product_name = 'email' 
AND upa.value = '[email protected]' 

我一直在看group_concat,但我認爲這是錯誤的路徑..任何建議?

+0

我想你已經在[你前面的問題]這個問題的答案(http://stackoverflow.com/questions/4934300/mysql-attribute-database)。只需修改[我的答案](http://stackoverflow.com/questions/4934300/mysql-attribute-database/4934506#4934506)的第一行是:`選擇upa1.value作爲用戶名,upa2.value作爲域` – 2011-02-09 14:19:24

+0

嘿喬,再次看看我的問題之一.. upa1用於拉回匹配別名的valies .. upa2帶回2個值作爲用戶名和域作爲單獨的行。 – Lee 2011-02-09 14:21:11

回答

2

group_concat沒有錯。以下查詢將會很慢,但對於一個小表而言,這可能並不重要。

SELECT 
GROUP_CONCAT(IF(`attribute_name`='username', `value`,'')) AS `username`, 
GROUP_CONCAT(IF(`attribute_name`='domain', `value`, '')) AS `domain`, 
FROM (your old table or the select query) 
GROUP BY `attribute_name`