开发Facebook风格的新闻Feed

时间:2011-03-30 00:41:08

标签: php mysql facebook comments facebook-feed

如果这个问题已被提出或回答,我真的很抱歉,但我似乎无法找到我需要的东西。

我已经构建了其他所有部分,我唯一的问题是围绕内联评论。我想做类似Facebook所做的事情,他们用一个按钮来显示所有y评论的x评论。

然而,我能看到的唯一两种方法是:

  1. 在呈现每个项目的循环中执行SELECT(我想任何可能对此有答案的人都会同意我这是一个糟糕的决定)
  2. 执行一个大的select来获取news_id在某个子集中的所有注释,然后使用PHP迭代它们,选择最近的x,忽略其余的。
  3. 其中任何一个似乎都不是一个好的解决方案;然而,因为它们都涉及巨大的资源浪费。

    有没有人有可能实施此建议?

3 个答案:

答案 0 :(得分:1)

SELECT * FROM comments_table WHERE article_id = {something} LIMIT {no_of_comments_per_page} SORT BY date DESC

这是一个非常简单但功能强大的评论查询。

实际代码

<?php
$sql = "SELECT * FROM comments_table WHERE article_id = 24 LIMIT 40 SORT BY date DESC";
$data = mysql_query($sql);
$comments = mysql_fetch_assoc($data);
foreach($comments as $comment){
  $ct++;
  echo "ID: {$ct}";
  echo "<br />";
  echo "Comment: {$comment["comment"]} by {$comment["user"]}";
  echo "Date: {$comment["date"]}";
}
?>

答案 1 :(得分:0)

我使用SELECT,并在子句中添加了LIMIT,按DESC顺序按'id'排序。类似于......“SELECT * FROM comments LIMIT 3 DESC”

当用户点击“加载更多评论”按钮时,执行某种类型的AJAX请求,其查询类似于“SELECT * FROM comments LIMIT X,3 DESC”

答案 2 :(得分:0)

我会做一个JOIN,然后对数据进行排序。类似的东西:

SELECT articles.id, articles.text, articles.date, 
       comments.id, comments.text, comments.date
FROM articles LEFT JOIN comments ON (comments.article_id = articles.id)
WHERE {some criteria} ORDER BY articles.date, comments.date

具有隐藏的额外注释的性能问题实际上可以忽略不计 - 并且当他们点击“看到所有”按钮时,你没有额外的开销来加载其他注释的ajax请求 - 你可以只是隐藏它们,然后立即显示它们。

如果你只想要前40个帖子,你必须将这个条件添加到where子句中(事实上,你可以包装你正在做的任何过滤):

WHERE articles.id IN (SELECT id FROM articles ORDER by articles.date LIMIT 40)