4

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

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

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

  1. 在呈现每个项目的循环中执行 SELECT(我认为任何可能对此有答案的人都会同意我的观点,即这是一个糟糕的决定)
  2. 执行一次大选择以提取 news_id 在某个子集中的所有评论,然后使用 PHP 对其进行迭代,选择 x 最近的,并忽略其余的。

这些似乎都不是一个好的解决方案。但是,因为它们都涉及巨大的资源浪费。

有没有人有实施这个的潜在建议?

4

3 回答 3

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"]}";
}
?>
于 2011-03-30T00:44:41.840 回答
0

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

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

于 2011-03-30T00:46:08.923 回答
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)
于 2011-04-17T02:27:37.327 回答