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

我拥有每一块建造的,我唯一的问题是周围的意思。我想做一些类似于Facebook的内容,他们将X评论与按钮渲染X评论来显示所有y评论。 但是,我可以看到这样做的唯一两种方式是:

  1. 在循环中执行一个选择,使每个项目呈现(我认为任何可能对此可能有答案的人会同意我这是一个可怕的决定)
  2. 执行一个大型选择以将news_id的所有注释拉到某个子集中,然后使用php迭代它们,选择最近的x,忽略其余的x。

    这些似乎都不是一个好的解决方案;然而,由于它们都涉及巨大的资源浪费。

    有人是否有潜在的实施建议?

有帮助吗?

解决方案

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"]}";
}
?>
.

其他提示

我将使用选择的限制为子句,按desc订单中的'id'排序。类似的东西..“从评论中选择*限制3 desc”

当用户单击“加载更多注释”按钮时,使用类似于的查询执行某种类型的Ajax请求。“选择*从注释限制x,3 desc”

我会做一个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)
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top