Я создаю сайт социальной сети, такой как Facebook. Прямо как какая-то часть. Я использовал php & mysql. У меня проблема со страницей указателей, где я покажу все последние комментарии моих друзей.
Позвольте мне расширить базу данных.
Комментарии к таблице:
comment_id
content
datetime
author_id //who created this comment
profile_id //the user_id of the owner profile which this comment commented on.
parent_id //the comment id which is parent of this comment id. if the parent_id = 0 , so this comment is the main comment.
Пользователи таблицы:
user_id
...some user info fields...
Стол дружбы
user_id // who added another as friend.
friend_id // who was added as friend by another.
status // the status of this friendship, 0 is invited and 1 is alreay friend (accepted)
Сначала я получу все идентификаторы моего друга.
$query = "select DISTINCT friend_id as friend from friendship where user_id = ".$user_id." and status = 1
union
select DISTINCT user_id as friend from friendship where friend_id = ".$user_id." and status = 1
";
Тогда я соберу все идентификаторы друзей в массиве.
foreach($total_friends as $each_friend){
$all_friend_id[] = $each_friend['friend'];
}
Теперь у меня есть массив идентификаторов друзей. Тогда я пытаюсь получить ограниченные новые комментарии.
Я получу ограниченное количество новых комментариев, когда это будет дополнительный комментарий или основной комментарий.
"select * from comments where author_id IN ('".implode("','",$all_friend_id)."' order by datetime desc limit 0 , 20";
Теперь у меня есть отсортированный новейший массив под- и основных комментариев (отсортированный по дате и времени), и если это подкомментарий, я получу основной комментарий этого комментария, а затем получу все подкомментарии. Если это основной комментарий, я получу все дополнительные комментарии.
В конце я получу массив, содержащий все основные и вложенные комментарии, которые были отсортированы как начало.
Вот изображение демо.
http://rongcon.info/demo/abc/newst.PNG
Здесь будет проблема дублирования основного комментария, когда в основном комментарии будет много новейших вложенных комментариев. Но я могу это легко исправить.
Я получил свою цель. Но проблема возникла, когда я пытаюсь получить «старые комментарии» с помощью ajax.
Проблема в старых комментариях, иногда я получаю подкомментарий, который в основном комментарии отображался в первом запросе. Поэтому я покажу дубликат основного комментария, и это ошибка, которую мне нужно исправить!
Я попробовал 2 способа исправить, но я не могу справиться со всеми ошибками.
1. Я сохраню все показанные идентификаторы основного комментария в javascript, а затем отправлю его в ajax, когда буду запрашивать более старые комментарии. В запросе более старого комментария я не допущу, чтобы основной комментарий и подкомментарий имели его родителя, который имеет Идентификатор в качестве основного идентификатора комментария. Так что я могу предотвратить эту ошибку.
Но когда я пытаюсь получить все более старые комментарии. Числа показанного идентификатора основного комментария будут длинными, и я боюсь, что это станет большой проблемой для производительности.
- Я использовал логику показа темы, чтобы получить новейший ответ на форуме. Я добавлю «last_comment_date» в каждый основной комментарий. Тогда я получу новейший комментарий, основанный только на основном комментарии, а не на дополнительном комментарии. Так что это идет к базовой логике разбиения на страницы, и я не получу дубликат комментария, когда я покажу старый комментарий.
Но я могу получить только самый новый основной комментарий и дополнительный комментарий в профиле моего друга и не могу получить основной комментарий, в котором есть самый новый дополнительный комментарий моего друга. Я снова падаю!
Так что я прошу лучшее решение для этой страницы. Каждый, кто строил, может мне помочь?
Большое вам спасибо!