我正在构建像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的数量很长,我担心这对性能来说是个大问题。
但我只能在我的朋友个人资料中获得最新的主要评论和子评论,并且无法得到主要评论,其中有我朋友的最新评论。我又跌倒了!
所以我要求为这个页面提供最佳解决方案。建造的人可以帮助我吗? 非常感谢你!
答案 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获取较旧的评论时,如果没有他们的父母,你将不会得到子评论的碎片。
虽然可能会慢一些......