我正在为Web开发类创建一个Reddit克隆。按热点排序帖子是我要做的最后一件事
我正在努力的是,将热情等级绑定到网站上给定帖子的数据库条目。因为我已经在while循环中使用了mysqli_query,所以我无法启动另一个查询来添加热度等级。
我读过建议使用数组的帖子,但这会消耗大量的服务器资源,因为在页面刷新时会再次计算热度。
<?php
$link = mysqli_connect("localhost", "username", "password", "database");
if ($link === false) {
die("ERROR: Could not connect. " . mysqli_connect_error());
}
// this is just reddit's hotness algorithm
function hot($ups, $downs, $date) {
$s = $ups - $downs;
$order = log10(max(abs($s), 1));
if ($s > 0) {
$sign = 1;
} else if ($s < 0) {
$sign = -1;
} else {
$sign = 0;
}
$seconds = $date - 1134028003;
return round($sign * $order + $seconds / 45000, 2);
}
$query = "SELECT * from posts";
$result = mysqli_query($link, $query);
if($result) {
// goes through all posts for upvote/downvote values to calculate hotness
while ($row = mysqli_fetch_array($result)) {
$post_id = $row['post_id'];
$time_in_seconds = strtotime($row['timestamp']);
$hotness_rating = hot($row['upvotes'], $row['downvotes'], $time_in_seconds);
$hotness_query = 'UPDATE posts SET hotness=$hotness_rating WHERE post_id=$post_id';
// ideally this would add hotness to post's row in database
mysqli_query($link, $hotness_query);
}
} else {
echo mysqli_error($link);
}
?>
答案 0 :(得分:0)
你应该计算&#34; hotness&#34;关于其更新的主题,例如向上投票,向下投票或新消息,并在那时将其存储在数据库中。
这会给你一个热情&#34;数据库中的值没有毫无意义的*重新计算每次刷新,你可以简单地排序&#34; hotness&#34;。
每次刷新时的这些重新计算都是没有意义的,因为如果数据没有改变 - 每次刷新都会得到相同的结果,并进行无用的更新以更新到相同的值。