2015-02-04 94 views
5

我是新來的PHP,我搜索了過去一小時,閱讀了所有我能找到的文檔,沒有任何幫助。我有一個有大量數據行的表。我試圖從整個表中選取一列並將它們一起添加。這是我得到的。所有這些都告訴我有多少行匹配我的查詢,而不是我想要的列總數。任何幫助表示讚賞。PHP MYSQL PDO列總和

$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; 
+1

把整個SQL字符串中的' '。 – developerwjk

+0

@developerwjk mysql可以同時使用,我很確定所有的sql服務器都可以這樣做。這與[聚合函數](http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html)缺乏理解的問題無關。如果她希望SUM()能夠... sum ...不同的值 –

+2

爲距離添加一個別名'sum(distance)' –

回答

9

您在此實例中只返回一行。修改你的總結列有一個別名:

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

現在你可以可以讀取該行 -

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

無需循環。

+0

不會工作如果沒有分組 –

+0

OP只選擇一個用戶,所以不需要分組 –

+0

不需要分組,因爲mysql會自己做分組[如果你在一個STA中使用分組功能如果不包含GROUP BY子句,則相當於在所有行上進行分組。](http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_sum) –

2

您可以使用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"; 
} 

這將返回距離的總和由用戶,並非所有用戶一次。如果您使用的是類

0

試試這個:「‘`周圍的字段值SQL通常使用`’`,敷``在裏面不`」

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