查看完整版本: 讀出資料庫的某欄位進行加總
頁: [1]

goddamnx2 發表於 2016-8-6 03:42 PM

讀出資料庫的某欄位進行加總

<?php
$odate=$_GET['odate'];
$link = @mysql_connect("localhost","root","123456") or die("無法聯上資料庫".mysql_error());
$sql="select opp from oo where odate = '$odate' ";
$result = mysql_db_query("dragon",$sql,$link);
while(list($opp)=mysql_fetch_array($result))
{
echo $opp;


}

foreach ($opp as $value){
        $total = $total + $value;
        echo $total;
       
        }


?>
我想對資料庫欄位中的 opp 所有數量進行加總
本來想說從資料庫讀到的陣列直接用array_sum
不行~
又試了foreach
也不行~所以來此請教了...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

theloserbm 發表於 2016-8-8 12:16 PM

從代碼上來看應該是新手吧

首先有一個很重要的觀念, 就是loop(無論是for, foreach, while, do)裡面的變數, 你必須在loop裡面處理掉, 你帶出來外面的話, 他只會存到最後一次的值.

在你的情況就是$total = 0; // 初始化是好習慣
while(list($opp)=mysql_fetch_array($result))
{
    echo $opp;
    $total = $total + $value;
    echo $total;
}如果你要分開做也不是不行, 那你就得先把它弄成一個array$temp_array = [];
while(list($opp)=mysql_fetch_array($result))
{
    echo $opp;
    $temp_array[] = $opp; // 把數值加入array裡
}

// 然後做你要的東西
foreach ($temp_array as $value) {
  ???
}最後像版主所說, 有些東西是可以直接在SQL解決的, 例如你例子的sumselect sum(opp) from oo where odate = '$odate' 或是select odate, sum(opp) from oo group by odate...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

goddamnx2 發表於 2016-8-8 07:39 PM

theloserbm 發表於 2016-8-8 12:16 PM static/image/common/back.gif
從代碼上來看應該是新手吧

首先有一個很重要的觀念, 就是loop(無論是for, foreach, while, do)裡面的變數, ...

那那那....我從書上的確看到可以從資料庫去處理~用sum(opp)變數
不過我不知道怎摸用php去讀資料庫處理運算後的結果ㄝ
以我的例子而言~請問該怎摸用php去讀?...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

theloserbm 發表於 2016-8-8 10:13 PM

第一種的話比較直接
因為只返回一欄, 所以直接讀取就可以了select sum(opp) from oo where odate = '$odate'
if (list($sum)=mysql_fetch_array($result))
{
    echo $sum;
}第二種其實也不難, 把返回的兩欄當作普通table就可以了select odate, sum(opp) from oo group by odate
while(list($date, $total)=mysql_fetch_array($result))
{
    echo $date . '-' . $total . '<br>';
}

goddamnx2 發表於 2016-8-9 08:28 PM

theloserbm 發表於 2016-8-8 10:13 PM static/image/common/back.gif
第一種的話比較直接
因為只返回一欄, 所以直接讀取就可以了第二種其實也不難, 把返回的兩欄當作普通table就 ...

太好了~it works!!!
thank you very much <br><br><br><br><br><div></div>

goddamnx2 發表於 2016-8-14 03:44 PM

goddamnx2 發表於 2016-8-9 08:28 PM static/image/common/back.gif
太好了~it works!!!
thank you very much

<?php


echo oppcount("2016-08-18");

$link = @mysql_connect("localhost","root","123456") or die("無法聯上資料庫".mysql_error());

function oppcount($odate=""){
  global $link;
  $sql="select sum(opp) from oo where odate = '$odate' ";
  $result=mysql_db_query("dragon",$sql,$link) or die("無法取日記資料!<br>".$sql);
  $sum = mysql_fetch_array($result);
  return $sum;

}
?>我嘗試把這段語法寫成函數,結果卻失敗了==//
大大please~又錯在哪了??...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

goddamnx2 發表於 2016-8-16 08:27 PM

haha~我知道問題在哪了~
$link要放到第一行
否則就會出錯誤

s947477 發表於 2016-9-18 02:39 AM

goddamnx2 發表於 2016-8-16 08:27 PM static/image/common/back.gif
haha~我知道問題在哪了~
$link要放到第一行
否則就會出錯誤

php  不夠嚴謹的地方 使用其他框架會強調個錯誤
頁: [1]