Вот моя схема таблицы MySQL;
- таблица состояния // имеет идентификатор статуса, идентификатор пользователя, дату, тему, дату
- таблица комментариев // содержит commentID,
идентификатор пользователя, который разместил, дата и statusID
что оно тоже принадлежит
- таблица пользователей // содержит имя пользователя userID
и URL фотографии пользователя
С приведенной выше схемой таблицы мне нужно сделать это;
- Быстро с наименьшим количеством запросов к БД
- Показать все записи статуса на странице, опубликованные пользователем в моем списке друзей (может быть до 5000 друзей)
- показать все комментарии для каждого статуса
запись под соответствующим блогом
- показывать имя пользователя / фото URL для каждого
статус записи поста
- показать имя пользователя / фото URL для всех
коментарии рядом с там
комментарий
Результат, к которому я стремлюсь, похож на myspace или facebook, где он будет показывать все сообщения / действия или что-либо еще только от ваших ДРУЗЕЙ.
Вы можете даже сравнить ЭТУ страницу при переполнении стека с тем, что я пытаюсь выполнить, посчитать мой пост статусным постом, и все ответы на этой странице будут статусными постами, тогда под всеми ответами на этой странице будут показаны комментарии у каждого из них есть информация о пользователе, есть ли лучший способ сделать это без такого количества соединений и прочего?
Вопрос 1
Есть ли способ лучше выполнить то, что мне нужно? Это не достаточно быстро, когда миллионы строк просматриваются даже с индексами. Какие у меня варианты?
Вопрос 2
Можно ли изменить это так, чтобы он отображал только первое количество комментариев X в каждом статусном сообщении? И если да, то ускорит ли это, так как не нужно будет искать столько комментариев?
Ниже список друзей уже находится в запросе, причина в том, что я планирую поместить список друзей в массив и сохранить его в кэше памяти или кэше APC, чтобы он был на 1 меньше запроса
Вот мой запрос
SELECT s.statusid, s.userid, s.statustype, s.subject,
s.datetime, c.commentid, c.statusid, c.userid,
c.comment, c.datetime, su.disp_name,
su.pic_url, cu.disp_name, cu.pic_url
FROM teststatus AS s
LEFT JOIN teststatuscomments AS c
ON s.statusid = c.statusid
LEFT JOIN friend_reg_user AS su
ON su.auto_id = s.userid
LEFT JOIN friend_reg_user AS cu
ON cu.auto_id = c.userid
WHERE s.userid =1 OR s.userid
IN ( 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, // Remember this list of friend ID's
16, 17, 18, 19, 20 ) //can be from any ammount of ID's up to 5,000
ORDER BY s.statusid
PS) Я начну вознаграждение за это, как только оно позволит мне