SELECT
`posts`.`id`,
`posts`.`created_at`,
`posts`.`content`,
`posts`.`replies`,
`groups`.`id` AS `group_id`,
`groups`.`name` AS `group_name`,
`users`.`id` AS `user_id`,
`users`.`name`,
`users`.`surname`,
`users`.`avatar`,
`posts`.`link`,
`posts`.`event_id`,
`events`.`name` AS `event_name`,
`docs`.`id` AS `attachment_id`
FROM `posts`
JOIN `groups`
ON (`groups`.`id` = `posts`.`group_id`)
JOIN `users`
ON (`users`.`id` = `posts`.`user_id`)
LEFT JOIN `events`
ON (`events`.`id` = `posts`.`event_id`)
LEFT JOIN `docs`
ON (`docs`.`post_id` = `posts`.`id`)
WHERE `posts`.`post_id` = 0
AND `posts`.`group_id` = '28'
ORDER BY `posts`.`id` DESC
LIMIT 4
OFFSET 0
Этот запрос выбирает сообщения для текущей группы.Последнее, что мне нужно добавить, это то, что он выбирает документы (docs
), которые относятся к этому сообщению ...
...
`docs`.`id` AS `attachment_id`
...
LEFT JOIN `docs`
ON (`docs`.`post_id` = `posts`.`id`)
...
Мне понадобятся hashed_name
и name
из таблицы docs
.На данный момент он выбирает только id
, но это не самая большая проблема.Проблема в том, что с одним постом может быть связано более одного документа.
В этом случае в docs
таблица id
(первичные ключи) не совпадают, но post_id
(поэтому егосвязанные с этим постом).На данный момент, если к сообщению имеется более одного вложения, я получаю записи 'n' ... так что мне нравятся повторяющиеся записи.Вот в чем проблема.
Цель состоит в том, чтобы после этого выполнить циклический проходной массив следующим образом:
<?php
if(!empty($posts)) {
foreach ($posts as $post) {
echo $post['content'];
foreach ($post['docs'] as $doc) {
echo $doc['name'];
echo $doc['hashed_name'];
}
}
}
?>
Как изменить запрос, чтобы получить такой результат?Спасибо за совет!