2015年5月6日 星期三

如何取得 MySQL 聚合函數 (Aggregate) 的傳回值

平常使用 MySQL 函式庫查詢資料表時, 如果有查到資料, 則 run_sql() 會傳回一個二維陣列, 第一維是數字索引, 表示各列資料 (即每一筆紀錄就是一個一維陣列); 第二維是以各欄位名稱為索引的關聯陣列, 所以只要用 is_array(), count() 函式配合迴圈就可以取得資料庫的傳回值 :

$SQL="SELECT * FROM users";
$RS=run_sql($SQL);
if (is_array($RS)) { //或 count($RS)!=0, sizeof($RS)!=0
  for ($i=0; $i<count($RS); $i++) {
     echo $RS[$i]["name"];
    }
  }
$RS=null;

如果只有一列傳回值, 當然只要用 $RS[0]["name"] 即可取得.

但昨天在寫 KD 的計算時卻遇到了這個問題 : 若 SQL 用到統計用的聚合函數, 該怎麼取得傳回值呢? 例如計算 KD 時須先找出近 9 日收盤最低價與最高價, 參考 :

計算 KD 值的方法

$SQL="SELECT MAX(close) FROM ".$table." ORDER BY trade_date DESC LIMIT 9";
$RS=run_sql($SQL);

照理說最大值 MAX 與最小值 MIN 傳回的應該是一個值, 而不是一群值, 不過 run_sql() 仍然是傳回了一個二維陣列, 用 var_dump() 即可顯示其結構如下 :

var_dump($RS);

array(1) { [0]=> array(2) { [0]=> string(4) "82.5" ["MAX(close)"]=> string(4) "82.5" } }

因此可以用下列兩種方式取得傳回值 :

$max=$RS[0][0];  //建議用這個較簡單



$max=$RS[0]["MAX(close)"];  //忘了吧

當然其他的聚合函式如 COUNT 用法也是一樣.


沒有留言 :