PHP MYSQL 列的 PDO SUM

PHP MYSQL PDO SUM of columns

我是 php 的新手,我搜索了过去一个小时并阅读了我能找到的所有文档,但没有任何帮助。我有一个 table 有一堆数据行。我试图从整个 table 中选择一列并将它们全部加在一起。这是我得到的。所有这些告诉我的是有多少行与我的查询相匹配,而不是我想要的列的总和。感谢任何帮助。

$res1 = $db->prepare('SELECT sum(distance) FROM trip_logs WHERE user_id = '. $user_id .' AND status = "2"');
$res1->execute();
$sum_miles = 0;
while($row1 = $res1->fetch(PDO::FETCH_ASSOC)) {
$sum_miles += $row1['distance'];
}
echo $sum_miles;

在此实例中您只返回一行。修改您的求和列以具有别名:

SELECT SUM(distance) AS totDistance FROM trip_logs ....

现在您可以获取行 -

$row = $res1->fetch(PDO::FETCH_ASSOC);
echo $row['totDistance'];

无需循环。

您可以使用 SUM() 而无需明确地对您的行进行分组,因为 if you use a group function in a statement containing no GROUP BY clause, it is equivalent to grouping on all rows.

但是,如果您想将 SUM() 函数用于稍微复杂的事情,您必须对行进行分组,以便总和可以根据您的需要进行运算。

如果您想在单个语句中获得多个总和,例如一次获得所有用户的距离,您需要明确地对行进行分组:

$res1 = $db->prepare("
    SELECT
        SUM(distance) AS distance,
        user_id
    FROM trip_logs WHERE status = '2'
    GROUP BY user_id
");
$res1->execute();
while ($row = $res1->fetch(PDO::FETCH_ASSOC))
{
    echo "user $row[user_id] has runned $row[distance] km.\n";
}

这将 return 用户 的距离总和 ,而不是一次对所有用户。

如果您使用 Class 试试这个:

    class Sample_class{

        private $db;

        public function __construct($database) {
            $this->db = $database;
        }   

        public function GetDistant($user_id,$status) {

                    $query = $this->db->prepare("SELECT sum(distance) FROM trip_logs WHERE user_id =? AND status =?");

                    $query->bindValue(1, $user_id);
                    $query->bindValue(2, $status);

                    try{ $query->execute();     

                     $rows =  $query->fetch();
                     return $rows[0];

              } catch (PDOException $e){die($e->getMessage());}  
            } 
    }

$dist = new Sample_class($db);

$user_id = 10;
$status = 2;

echo $dist->GetDistant($user_id,$status);