开发Facebook风格的新闻饲料
-
14-11-2019 - |
题
我真的很抱歉,如果这个问题已经被问到或回答,但我似乎不能找到我需要的东西。
我拥有每一块建造的,我唯一的问题是周围的意思。我想做一些类似于Facebook的内容,他们将X评论与按钮渲染X评论来显示所有y评论。 但是,我可以看到这样做的唯一两种方式是:
- 在循环中执行一个选择,使每个项目呈现(我认为任何可能对此可能有答案的人会同意我这是一个可怕的决定)
- 执行一个大型选择以将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)
. 不隶属于 StackOverflow