ПРИСОЕДИНЯЙТЕСЬ к SQL-результатам из одной таблицы в одной строке и используйте значения в качестве имени столбца

0

Мне нужна помощь в построении запроса и объединении результатов в одну строку, вот таблицы:

tbl_contacts

id | name   | lastname  | email
 1 | daniel1| lastname1 | [email protected] 
 2 | daniel2| lastname2 | [email protected]

tbl_contacts_var

cid | name | value| 
 1  | VAR1 | d1   | 
 1  | VAR2 | d2   | 
 1  | VAR3 | d3   | 

Я попробовал следующий запрос, который является ближайшим желаемым результатом, который я мог бы получить, но мне он нужен по-другому, вот что я пробовал:

SELECT tbl_contacts.*, 
( SELECT GROUP_CONCAT(value SEPARATOR ',') 
FROM tbl_contacts_var WHERE 
tbl_contacts.id = tbl_contacts_var.cid ) 
as attributes 
FROM tbl_contacts WHERE tbl_contacts.id = 1

И это результат

 id | name   | lastname  | email           |attributes 
  1 | daniel1| lastname1 | [email protected]|d1,d2,d3

Однако результат, который я ищу, больше похож на следующий:

  id | name   | lastname  | email           | VAR1 | VAR2 | VAR3 |
   1 | daniel1| lastname1 | [email protected]| d1   | d2   | d3   |

Я попытался с JOIN, но он возвращает три строки, и мне нужен полный результат в одной строке, также мне нужно использовать значение "имя" во второй таблице в качестве имени столбца для результата, возможно ли это?

Буду признателен за любую помощь, спасибо!

  • 0
    Рассмотрим обработку вопросов отображения данных в коде приложения
Теги:
database
mysqli

1 ответ

0
Лучший ответ

Вы можете попробовать выполнить запрос ниже

SELECT c.name, c.name, c.lastname, c.email
    , MAX(
        CASE cv.name
            WHEN 'VAR1' THEN cv.VALUE
            ELSE NULL
        END
    ) AS VAR1
    , MAX(
        CASE cv.name
            WHEN 'VAR2' THEN cv.VALUE
            ELSE NULL
        END
    ) AS VAR2
    , MAX(
        CASE cv.name
            WHEN 'VAR3' THEN cv.VALUE
            ELSE NULL
        END
    ) AS VAR3
FROM tbl_contacts c
JOIN tbl_contacts_var cv ON cv.cid = c.id
GROUP BY c.name, c.name, c.lastname, c.email
  • 0
    Работать как шарм! Спасибо за вашу помощь, сэр

Ещё вопросы

Сообщество Overcoder
Наверх
Меню