Как можно избежать дублирования имен пользователей при объединении 2 таблиц - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть две таблицы, связанные с информацией о пользователе: Таблица 1 (Пользователи) содержит столбцы, такие как идентификатор, имя пользователя и адрес электронной почты Таблица 2 (подробности) содержит столбцы, такие как user_id, степень_имя и степень когда я соединяю эти две таблицы, я получаю следующий результат:

name         degree_name      degree

john doe      Metric          Science
john doe      Fsc             Engineering  
john doe      Bsc             BSCS
herald        Metric          Science
Matt          Metric          Science

В приведенных выше записях "Джон Доу" повторяется 3 раза. чего не следует ожидать от результата. Результат, который я хочу получить здесь, и который я знаю, может быть достигнут при использовании find_in_set ():

0: {name: john doe
    details: {0: {degree: "Science",degree_name: "Metric"}
              1: {degree: "Fsc",degree_name: "Engineering  "}
              2: {degree: "Science",degree_name: "BSCS"}}}
1: {name: herald
    details: {0: {degree: "Science",degree_name: "Metric"}}}
2: {name: Matt
    details: {0: {degree: "Science",degree_name: "Metric"}}}

Есть ли кто-нибудь, кто направит меня к правильному запросу?

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019
SELECT  u.username, CONCAT('{ "array": [',
               GROUP_CONCAT(CONCAT('{"degree_name": "',
                                   d.degree_name,
                                   '", "degree": "',
                                   d.degree,
                                   '"}'
                            ) separator ','),
               ']}') As details
FROM details d
        INNER JOIN users u
            ON FIND_IN_SET(u.id, d.user_id) > 0
GROUP BY u.id;

Этот запрос даст ожидаемый ответ.Просто нужно немного поработать над анализом json записей после получения результатов.

0 голосов
/ 19 апреля 2019

Вы можете использовать group_concat для степени и степени_имя.например:

SELECT name, group_concat(degree), group_concat(degree_name) FROM Table1,Table2 WHERE Table1.id=Table.User_id. GROUP BY Table1.id

Это даст вам результат с одной строкой для одного пользователя.

Jon Doe |Метрика, Fsc, Bsc |Наука, Eng, BCSC.

...