У меня есть такие таблицы:
Пользователи:
+----+--------+
| 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?
Не уверен, какие результаты вы хотите получить, он выглядит как многомерный (PHP) массив.
Также совет: посмотрите на INNER JOIN между этими таблицами, чтобы получить свои данные.
Попробуйте использовать функцию GROUP_CONCAT.
"MySQL будет генерировать данные только в табличной форме для вас" @MadhurBhaiya Не совсем верно. Я использовал MySQL раньше для создания "сложных" структур данных, таких как JSON или XML, в столбце таблицы. Вы даже можете сгенерировать сериализованный массив PHP из MySQL, если хотите и знаете структуру.
кстати, я предполагаю, что вместо этого должен быть $result = [ [1, "Name 1", ["Document name 1", "Document name 2", "Document name 3"]] , [2, "Name 2", ["Document name 2"]] ];?
@RaymondNijland о. это правильно. Я обновлю свой пост.






Может как то так?
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
MySQL будет генерировать данные только в табличной форме. Вам нужно будет использовать некоторый код приложения (обработка массивов), чтобы сгенерировать результат в нужной вам форме.