MySQL объединяет несколько строк в одну строку - PullRequest
0 голосов
/ 09 февраля 2011

У меня есть запрос, который возвращает несколько строк, как показано ниже в MySQL:

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 = 'emailalias@domainalias'

Я смотрю на group_concat, но я думаю, что это неправильный путь .. Есть предложения?

1 Ответ

2 голосов
/ 09 февраля 2011

Ничего плохого в 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` 
...