在PHP中一次执行多个MySQL数据库活动

时间:2017-12-04 19:12:57

标签: php mysql web

我正在为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);
}
?> 

1 个答案:

答案 0 :(得分:0)

你应该计算&#34; hotness&#34;关于其更新的主题,例如向上投票,向下投票或新消息,并在那时将其存储在数据库中。

这会给你一个热情&#34;数据库中的值没有毫无意义的*重新计算每次刷新,你可以简单地排序&#34; hotness&#34;。

每次刷新时的这些重新计算都是没有意义的,因为如果数据没有改变 - 每次刷新都会得到相同的结果,并进行无用的更新以更新到相同的值。