|
|
|
Вернуть массив(сложна)
|
|||
|---|---|---|---|
|
#18+
Всем привет, есть одна задача, выполнял раньше её используя несколько запросов. Есть система уведомлений, к этим уведомлениям есть прикрепления. Прикрепления привязывают 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" }] }] Возможно ли такое вообще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 00:57 |
|
||
|
Вернуть массив(сложна)
|
|||
|---|---|---|---|
|
#18+
IceElect, Разбейте вашу задачу на части: 1. Соединение таблиц . Получите выборку из базы. 2. выгрузка в JSON (возможно это уже форум по PHP, по json) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 15:20 |
|
||
|
Вернуть массив(сложна)
|
|||
|---|---|---|---|
|
#18+
trew, JSON я дал в качестве примера результат, если это часть php, тогда скорее всего запросов будет два, я хочу получить всё одним запросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 15:30 |
|
||
|
Вернуть массив(сложна)
|
|||
|---|---|---|---|
|
#18+
IceElect, Покажите свои два запроса из которых нужно сделать один запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 15:34 |
|
||
|
Вернуть массив(сложна)
|
|||
|---|---|---|---|
|
#18+
IceElecttrew, JSON я дал в качестве примера результат, если это часть php, тогда скорее всего запросов будет два, я хочу получить всё одним запросом. можно. по примеру нифига не понятно, что к чему клеится... но вы получите одним запросом чтото поле11 поле12 поле13 айди1 поле21 поле22 поле23 айди 2... и бегая масивом будете строить новый масив айдий - индекс, елементы поля 1х + вложеный масив - левел 2 в нём... тоесть при обработке очердной строки результата смотреть - есть ли уже елемент первого уровня по айди1, если есть добавлять только во второй уровень элемент, иначе предварительно создавать елемент на первом уровне ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 15:35 |
|
||
|
Вернуть массив(сложна)
|
|||
|---|---|---|---|
|
#18+
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) Что то вроде этого ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 15:39 |
|
||
|
Вернуть массив(сложна)
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, В примере три таблицы, пользователи, уведомления и связь Я мало чего понял из вашего сообщения. Я так понимаю, что я сам должен выстроить этот массив чем то вроде CONCAT? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 15:43 |
|
||
|
Вернуть массив(сложна)
|
|||
|---|---|---|---|
|
#18+
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 все необходимые поля для выборки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 16:11 |
|
||
|
Вернуть массив(сложна)
|
|||
|---|---|---|---|
|
#18+
trew, Совсем не то, что нужно. 1. Таким образом я не получаю массивы с информацией о пользователе. 2. Таким образом я получаю только 1 уведомление, а нужно все ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 16:46 |
|
||
|
Вернуть массив(сложна)
|
|||
|---|---|---|---|
|
#18+
IceElect, Замените на LEFT соединения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 17:22 |
|
||
|
Вернуть массив(сложна)
|
|||
|---|---|---|---|
|
#18+
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 Правда информацию о пользователях так и не получаю, похоже одним запросом никак ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2016, 17:42 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39330235&tid=1831295]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
172ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
| others: | 218ms |
| total: | 499ms |

| 0 / 0 |
