如何在社交网站上获得我朋友的最新评论

时间:2011-02-21 02:34:31

标签: php mysql networking social

我正在构建像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
    ";

然后我会把所有朋友的id都放到一个数组中。

foreach($total_friends as $each_friend){
        $all_friend_id[] = $each_friend['friend'];
    }

现在我有一个朋友ID数组。然后我试图获得有限的最新评论。 每当它发表评论或主要评论时,我都会收到有限的最新评论。

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

现在我有一个排序最新的子和主要注释数组(在datetime中排序的基数),如果这是一个子注释,我将获得此注释的主要注释,然后获得所有子注释。如果这是主要评论,我会得到所有子评论。

最后,我将得到一个包含所有主要和次要注释的数组,这些注释按开始排序。 这是一个图像演示。 http://rongcon.info/demo/abc/newst.PNG

当主评论中有许多最新的子评论时,这将是一个重复的主要评论问题。但我可以很容易地解决它。

我实现了目标。但是当我试图通过ajax获得“较早的评论”时引起的问题。

问题出现在较旧的评论中,有时我会在第一个请求中显示的主评论中得到一个子评论。所以我会显示一个重复的主评论,这是我需要修复的错误!

我尝试了2种修复方法,但我无法处理所有错误。 1.我将在javascript中保存所有显示的主要评论ID,然后当我请求较早的评论时我会将其发送到ajax中。在旧评论的查询中,我将阻止主评论和子评论有它的父母哪个有ID作为显示的主要评论ID。所以我可以防止这个bug。

但是当我想要获得越来越多的老评论时。显示的主要评论ID的数量很长,我担心这对性能来说是个大问题。

  1. 我使用show topic的逻辑在论坛中有最新的回复。我将在每个主评论中添加“last_comment_date”。然后,我将仅根据主要评论而非子评论获得最新评论。所以这是基本的分页逻辑,当我显示较早的评论时,我不会得到重复的评论。
  2. 但我只能在我的朋友个人资料中获得最新的主要评论和子评论,并且无法得到主要评论,其中有我朋友的最新评论。我又跌倒了!

    所以我要求为这个页面提供最佳解决方案。建造的人可以帮助我吗? 非常感谢你!

1 个答案:

答案 0 :(得分:1)

不是选择所有评论(包括子评论),而是先选择父评论...(其中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

然后foreach父母,去获取子评论,当从ajax获取较旧的评论时,如果没有他们的父母,你将不会得到子评论的碎片。

虽然可能会慢一些......