Выбрать все записи из таблицы отношений как массив на основе первичного ключа «родительской» таблицы - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть следующие таблицы:

Пользователи:

+----+--------+
| Id |  Name  |
+----+--------+
|  1 | Name 1 |
|  2 | Name 2 |
+----+--------+

Группа документов:

+----+-----------------+
| Id |       Name      |
+----+-----------------+
|  1 | Document name 1 |
|  2 | Document name 2 |
|  3 | Document name 3 |
+----+-----------------+

Группа документов пользователей:

+----+---------+--------------+
| Id | User_id |  Document_id |
+----+---------+--------------+
|  1 |       1 |            1 |
|  2 |       1 |            2 |
|  3 |       2 |            2 |
|  4 |       1 |            3 |
+----+---------+--------------+

Я хочу, чтобы результат выглядел так:

result = [
    1, "Name 1", ["Document name 1", "Document name 2", "Document name 3"]
    2, "Name 2", ["Document name 2"]
]

Проблема в том, что я даже не знаю, как начать ...

В настоящее время я анализирую много данных на бэкэндесторона и группировка / отображение там (с использованием PHP), но у меня проблема в том, что с большим набором данных, это занимает много времени (около 10 секунд) ...

Есть ли способ создать запрос, какэто в MySQL?

1 Ответ

0 голосов
/ 26 сентября 2018

Может как то так?

select 
    group_concat(concat(users.id, ',', concat('\"',users.name,'\"'), ',',  
concat('[',all_documents,']')), ';') 
    as final_result
from users
join 
    (
        select group_concat(concat('\"',documents.name,'\"')) 
        as all_documents,users.id
        from users_documents, users, documents
        where documents.id=users_documents.document_id and 
        users.id=users_documents.user_id
        group by users.id
    ) temp1 on users.id = temp1.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...