powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вернуть массив(сложна)
11 сообщений из 11, страница 1 из 1
Вернуть массив(сложна)
    #39330235
IceElect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет, есть одна задача, выполнял раньше её используя несколько запросов.
Есть система уведомлений, к этим уведомлениям есть прикрепления.
Прикрепления привязывают id пользователей к уведомлениям.

Нужно получить уведомления и информацию о пользователях, прикреплённых к ним.

notify:
id text to_user_id
==== ==== ========
1 123 1


notify_attach:
notify_id type user_id
======== ==== =====
1 user 2
1 user 3

users:
id fname lname avatar
=== ===== ==== =====
1 Vasya Petrov 1.png
2 Maxim Petrov 2.png
3 Vovka Petrov 3.png


Хочу получить результат вроде такого(json для примера):

[{
"text":"123",
"to_user_id":1,
"users":[{
"id":2,
"fname":"Maxim",
"lname":"Petrov",
"avatar":"2.png"},
{
"id":3,
"fname":"Vovka",
"lname":"Petrov",
"avatar":"3.png"
}]
}]


Возможно ли такое вообще?
...
Рейтинг: 0 / 0
Вернуть массив(сложна)
    #39330756
trew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceElect,

Разбейте вашу задачу на части:
1. Соединение таблиц . Получите выборку из базы.
2. выгрузка в JSON (возможно это уже форум по PHP, по json)
...
Рейтинг: 0 / 0
Вернуть массив(сложна)
    #39330770
IceElect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
trew,
JSON я дал в качестве примера результат, если это часть php, тогда скорее всего запросов будет два, я хочу получить всё одним запросом.
...
Рейтинг: 0 / 0
Вернуть массив(сложна)
    #39330779
trew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceElect,

Покажите свои два запроса из которых нужно сделать один запрос.
...
Рейтинг: 0 / 0
Вернуть массив(сложна)
    #39330782
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceElecttrew,
JSON я дал в качестве примера результат, если это часть php, тогда скорее всего запросов будет два, я хочу получить всё одним запросом.

можно. по примеру нифига не понятно, что к чему клеится...

но вы получите одним запросом чтото

поле11 поле12 поле13 айди1 поле21 поле22 поле23 айди 2...

и бегая масивом будете
строить новый масив
айдий - индекс, елементы поля 1х + вложеный масив - левел 2
в нём...

тоесть при обработке очердной строки результата смотреть - есть ли уже елемент первого уровня по айди1, если есть добавлять только во второй уровень элемент, иначе предварительно создавать елемент на первом уровне
...
Рейтинг: 0 / 0
Вернуть массив(сложна)
    #39330787
IceElect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
trew,

1. SELECT GROUP_CONCAT(a.user_id) as u_ids FROM notify n
LEFT JOIN notify_attach a ON(a.notify_id = n.id)

2. SELECT * FROM users WHERE id IN(:u_ids)

Что то вроде этого
...
Рейтинг: 0 / 0
Вернуть массив(сложна)
    #39330790
IceElect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex564657498765453, В примере три таблицы, пользователи, уведомления и связь
Я мало чего понял из вашего сообщения. Я так понимаю, что я сам должен выстроить этот массив чем то вроде CONCAT?
...
Рейтинг: 0 / 0
Вернуть массив(сложна)
    #39330831
trew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceElecttrew,

1. SELECT GROUP_CONCAT(a.user_id) as u_ids FROM notify n
LEFT JOIN notify_attach a ON(a.notify_id = n.id)

2. SELECT * FROM users WHERE id IN(:u_ids)

Что то вроде этого

Код: sql
1.
2.
3.
4.
SELECT GROUP_CONCAT(a.user_id) as u_ids 
FROM notify n
INNER JOIN notify_attach a ON(a.notify_id = n.id)
INNER JOIN users u  ON(u.id = n.user_id)



укажите в SELECT все необходимые поля для выборки.
...
Рейтинг: 0 / 0
Вернуть массив(сложна)
    #39330873
IceElect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
trew,

Совсем не то, что нужно.
1. Таким образом я не получаю массивы с информацией о пользователе.
2. Таким образом я получаю только 1 уведомление, а нужно все
...
Рейтинг: 0 / 0
Вернуть массив(сложна)
    #39330909
trew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IceElect,

Замените на LEFT соединения
...
Рейтинг: 0 / 0
Вернуть массив(сложна)
    #39330931
IceElect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
trew,

Задача по прежнему не решена, тут всё намного сложнее

Вот это почти подходит:


SELECT notify.data, notify.type,
GROUP_CONCAT(p.names) addresses,
p.names phones
FROM notify notify
LEFT JOIN notify_attach a ON notify.id = a.item_id
LEFT JOIN (
SELECT ui.id, GROUP_CONCAT(ui.fname) names
FROM users ui
GROUP BY ui.id
) p ON notify.user_id = p.id
GROUP BY notify.id

Правда информацию о пользователях так и не получаю, похоже одним запросом никак
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вернуть массив(сложна)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]