Как получить новейшие комментарии моего друга на сайте социальной сети - PullRequest
1 голос
/ 21 февраля 2011

Я создаю сайт социальной сети, такой как 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, когда буду запрашивать более старые комментарии. В запросе более старого комментария я не допущу, чтобы основной комментарий и подкомментарий имели его родителя, который имеет Идентификатор в качестве основного идентификатора комментария. Так что я могу предотвратить эту ошибку.

Но когда я пытаюсь получить все более старые комментарии. Числа показанного идентификатора основного комментария будут длинными, и я боюсь, что это станет большой проблемой для производительности.

  1. Я использовал логику показа темы, чтобы получить новейший ответ на форуме. Я добавлю «last_comment_date» в каждый основной комментарий. Тогда я получу новейший комментарий, основанный только на основном комментарии, а не на дополнительном комментарии. Так что это идет к базовой логике разбиения на страницы, и я не получу дубликат комментария, когда я покажу старый комментарий.

Но я могу получить только самый новый основной комментарий и дополнительный комментарий в профиле моего друга и не могу получить основной комментарий, в котором есть самый новый дополнительный комментарий моего друга. Я снова падаю!

Так что я прошу лучшее решение для этой страницы. Каждый, кто строил, может мне помочь? Большое вам спасибо!

1 Ответ

1 голос
/ 21 февраля 2011

Вместо выбора всех комментариев (включая подкомментарии), возможно, сначала выбираются только родительские комментарии ... (где parent_id = 0).

select * from comments where parent_id=0 and author_id IN ('".implode("','",$all_friend_id)."' order by datetime desc limit 0 , 20

Тогда для каждого родителя перейдите и получите подкомменты, так что при извлечении старых комментариев из ajax вы не получите фрагменты подкомментов без их родителей.

Хотя это может быть медленнее ...

...