我只想財產以後這樣的:MySQL:如何在一個查詢中獲取所有字段的SUM()?
select SUM(*) from `mytable` group by `year`
什麼建議嗎?
(我使用Zend框架;如果你有使用ZF而不是純查詢的建議將是巨大的!)
更新:我有表列的質量和我不想要把他們的名字一一寫下來。
沒有想法?
我只想財產以後這樣的:MySQL:如何在一個查詢中獲取所有字段的SUM()?
select SUM(*) from `mytable` group by `year`
什麼建議嗎?
(我使用Zend框架;如果你有使用ZF而不是純查詢的建議將是巨大的!)
更新:我有表列的質量和我不想要把他們的名字一一寫下來。
沒有想法?
SELECT SUM(column1) + SUM(column2) + SUM(columnN)
FROM mytable
GROUP BY year
使用Zend Framework的Zend_Db_Select對象,您的查詢可能看起來像
$db = Zend_Db::factory(...options...);
$select = $db->select()
->from('mytable', array('sum1' => 'SUM(`col1`)', 'sum2' => 'SUM(col2)')
->group('year');
$stmt = $select->query();
$result = $stmt->fetchAll();
參考Zend_Db_Select文檔中的ZF手冊,瞭解更多。
編輯:我不好,我想我誤解了你的問題。上面的查詢將返回每個列的總和,但不是所有列的總和。重寫Maxem的查詢,這樣就可以與Zend Framework的數據庫適配器使用它,它可能看起來像
$sql = '<insert Maxem's query here>';
$result = $db->fetchAll($sql);
您可以選擇使用fetchCol()檢索一個結果。
這聽起來像你不想明確枚舉列,並且想要將所有列(可能不包括year
列)總和在所有行上,並按年份分組。
請注意,方法Zend_Db_Table::info(Zend_Db_Table_Abstract::COLS)
將返回包含基礎表的列名稱的數組。你可以使用數組,像下面這樣構建查詢:
Zend_Db_Table::setDefaultAdapter($db);
$table = new Zend_Db_Table('mytable');
$fields = $table->info(Zend_Db_Table_Abstract::COLS);
unset($fields['year']);
$select = $table->select();
$cols = array();
foreach ($fields as $field){
$cols[] = sprintf('SUM(%s)', $field);
}
$select->cols(implode(' + ', $cols));
$select->group('year');
我沒有測試特定的語法,而是思想的核心是調用info()
拿到場動態。
或者不使用Zend ...
function mysql_cols($table){
$sql="SHOW COLUMNS FROM `".$table."`";
$res=mysql_query($sql);
$cols=array();
while($row=mysql_fetch_assoc($res))$cols[]=$row['Field'];
return $cols;
}
$cols=mysql_cols("mytable");
$select_sql=array();
foreach($cols as $col){
$select_sql[]="SUM(`".$col."`)";
}
$select_sql=implode('+',$select_sql);
$sql="select (".$select_sql.") from `mytable` group by `year`";
完成在ZF而不是單純的查詢,不必寫列一個接一個的名字。 (我假設你正在擴展Zend_Db_Table_Abstract)
如果你問怎麼寫
select SUM(*) from `mytable` group by `year`
這是它是如何做:
public function sumOfAllFields(){
return $this->fetchAll($this->select()->from('mytable','SUM(*)')->group('year'))->toArray();
}