php - 在 PHP 中同时执行多个 MySQL 数据库事件

标签 php mysql web

我正在为 Web 开发类(class)创建 Reddit 克隆。按热度对帖子进行排序是我最后要做的事情。
我正在努力解决的问题是将热度评级绑定(bind)到网站上给定帖子的数据库条目。因为我已经在 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);
}
?> 

最佳答案

您应该在主题更新时计算其“热度”,例如赞成票、反对票或新消息,并将其存储在数据库中。

这将为您提供数据库中的“热度”值,而无需在每次刷新时进行无意义的*重新计算,并且您可以简单地按“热度”排序。

每次刷新时的这些重新计算是毫无意义的,因为如果数据未更改 - 您将在每次刷新时得到相同的结果,并进行无用的更新以更新为相同的值。

关于php - 在 PHP 中同时执行多个 MySQL 数据库事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47640359/

相关文章:

php - MySQL计数查询不起作用,但它显示记录列表

javascript - WordPress仅在用户未登录时执行javascript文件

php - IP和域创建不同的 session

javascript - 通过 PHP URL 从 JSON 对象构建 HTML 表

php - 无法使用 PHP 将数据插入我的 MySQL 数据库

php - sanitizer 输入但输出不符合预期

mysql - 为什么在MySQL innodb缓冲池中撤消日志条目(MySQL 5.7)

php - 以数组形式返回 group_concat 数据

java - 如何处理海量的网页抓取请求

css - 禁用宽度以继承其他 div