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);
我是 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);