【问题标题】:PHP update table data based on other tablePHP根据其他表更新表数据
【发布时间】:2012-08-27 23:25:27
【问题描述】:

我正在尝试创建一个 cron 作业,它将从事务表中选择点的总和。

根据积分总和和员工 ID,我必须更新总积分表。 我想确保我使用的是最好的方法并且这会奏效。

 <?php

    $conn = mysql_connect("localhost", "mysql_user", "mysql_password");

    if (!$conn) {
        echo "Unable to connect to DB: " . mysql_error();
        exit;
    }

    if (!mysql_select_db("mydbname")) {
        echo "Unable to select mydbname: " . mysql_error();
        exit;
    }

    $sql = "SELECT ID, SUM(POINTS) as Points, FROM Transactions WHERE Status = 1 Group By ID";

    $result = mysql_query($sql);

    if (!$result) {
        echo "Could not successfully run query ($sql) from DB: " . mysql_error();
        exit;
    }

    if (mysql_num_rows($result) == 0) {
        echo "No rows found, nothing to print so am exiting";
        exit;
    }


    while ($row = mysql_fetch_assoc($result)) {  

    mysql_query("UPDATE Totals SET Points=" + $row["Points"] + "WHERE ID=" +  $row["id"]);

    }


    mysql_free_result($result);

    ?> 

【问题讨论】:

  • 我很好奇你为什么不直接在桌面上为这种事情做一个触发器。这些表不在同一个数据库中吗?
  • 你可能在伤害 Pandas。 Please read this article

标签: php mysql sql cron


【解决方案1】:

您仍然可以在 UPDATE 语句上连接表(和子查询)。试试这个,

UPDATE Totals a 
        INNER JOIN
        (
            SELECT ID, SUM(POINTS) as Points, 
            FROM Transactions 
            WHERE Status = 1 
            Group By ID
        ) b
        ON a.ID = b.ID
SET a.Points = b.Points

希望这会有所帮助。

使用PDO Extension (Code Snippet)的示例。

<?php

$query = "UPDATE Totals a 
            INNER JOIN
            (
                SELECT ID, SUM(POINTS) as Points, 
                FROM Transactions 
                WHERE Status = ? 
                Group By ID
            ) b
            ON a.ID = b.ID
    SET a.Points = b.Points";

$iStatus = 1;
$stmt = $dbh->prepare($query);
$stmt->bindParam(1, $iStatus);

$stmt->execute();

?>

PDO Manual
PDO PreparedStatement

【讨论】:

  • 还有一件事,在使用 PHP 时使用 PDO 或 MySQLI 扩展。 mysql_* 已折旧。
  • 你知道我将如何实现 PDO
【解决方案2】:

为什么不能在通过 cron 作业运行脚本之前先对其进行测试?我看不出语法有什么问题。但是话又说回来,我只是快速浏览了一下,我不知道你的表结构是什么样的。

如果您正在寻找做事的最佳方式,那么您应该考虑使用 mysqli 或 PDO 而不是 mysql 函数。这样,您可以使用准备好的语句,如果您计划在一个循环中运行多个查询,这不会对您的 DBMS 造成负担。准备好的语句不需要您对服务器进行单独的往返,而旧的 mysql 函数则需要。

【讨论】:

  • 这就是我想弄清楚我将如何以更好的方法(例如使用 PDO)做同样的事情
猜你喜欢
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
相关资源
最近更新 更多