2010-05-12 23 views

回答

5
SELECT  SUM(column1) + SUM(column2) + SUM(columnN) 
FROM  mytable 
GROUP BY year 
3

使用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()檢索一個結果。

2

這聽起來像你不想明確枚舉列,並且想要將所有列(可能不包括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()拿到場動態。

0

或者不使用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`"; 
1

完成在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(); 
} 
相關問題