[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод записей (аналог стены вконтакте, MySQL)
fenec
Всем привет!

Работаю на проекте социальной сети, делаем с нуля. Необходимо найти оптимальное (наиболее быстрое и простое) решение для вывода сообщений, комментариев к ним, прикреплений (фотки, ссылки и тп) и голосов за сообщения и комментарии.
Сейчас все выводится в цикле вот так:

 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 - там первый вариант)


 ! 

М
Обрамляйте код тегами [php][/php]
PHPprogrammer




Спустя 1 час, 18 минут, 33 секунды (20.07.2011 - 18:30) kovaldm написал(а):
Если инфа хранится в БД, то запросом к БД. Делать придется циклом. Запрос зависит от того по каким критериям будете считывать инфу.

Спустя 3 часа, 16 минут, 35 секунд (20.07.2011 - 21:46) fenec написал(а):
Да, все в БД. Вот структура:

messages
id text user_id
--
comments
id parent_id parent_class oid user_id text
--
likes - голосование
id user_id resource_type resource_id
--
message_references
id message_id reference_id type

users
id name


Кроме остального нужно еще получать инфу о пользователе, который оставил сообщение, комментарий или голос.

Не понял, каким циклом? sql запросы в цикле?

Спустя 12 минут, 38 секунд (20.07.2011 - 21:59) kovaldm написал(а):
Результат запроса к БД обрабатывается в цикле.
А в чем проблема конкретно?

Спустя 16 часов, 9 минут, 25 секунд (21.07.2011 - 14:08) fenec написал(а):
в том, что если оставить как сейчас: $message->getComments();
для каждого сообщения будет вызываться запрос на получение комментов, запрос на получение голосов за сообщение и прикреплений вместо 3 запросов на все, которые потом уже на уровне пхп в один массив засунуть.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.