Работаю на проекте социальной сети, делаем с нуля. Необходимо найти оптимальное (наиболее быстрое и простое) решение для вывода сообщений, комментариев к ним, прикреплений (фотки, ссылки и тп) и голосов за сообщения и комментарии.
Сейчас все выводится в цикле вот так:
foreach ($messages as $message) {
$message->getComments();
...
}
аналогично получаются прикрепления, фотки и тп. решение простое, но запросы идут в цикле, что увеличивает их количество в несоклько раз (хотя они и небольшие).
есть такой вариант:
$arr = array();
foreach ($messages as $message) {
$arr[$message->id] = $message->as_array();
$arr[$message->id]['comment'] = array();
foreach ($comments as $comment) {
if ($comment->message_id == $message->id) {
$arr[$message->id]['comment'][$comment->id] = $comment->as_array();
}
}
получает отдельными запросами комменты и сообщения и уже на программном уровне пишем все в один массив, но по-моему это слишком запутанно.
наверное, можно на уровне sql сделать, но наверное там запрос совсем дикий получится.
Кто что посоветует? Как вообще это делается в социалках? (я смотрел socialEngine - там первый вариант)