2011-09-12 22 views
2

在Zend_Db_Table_Abstract我使用這個代碼來獲得結果的計數我的選擇:Zend_Db_Table_Abstract數

$this->setTableName('visitors'); 
$select = $this->select() 
       ->from('visitors') 
       ->columns(array('total' => new Zend_Db_Expr('COUNT(*)'))) 
       ->where('...'); 
$visits = $this->_fetch($select); 

有沒有更好的辦法,即,只是返回計數。這會返回數組中的其他數據......我只是想要計算結果的數量。在直MySQL中相當於是select count( mycol ) from visitors where ....

+2

只算。 '$ count =(int)$ this-> getAdapter() - > fetchOne($ select);' try :) – SMka

+0

'fetchOne()'獲取SQL結果第一行的第一列。 – SMka

回答

4

這是未經測試,但應該讓你開始:

$results = $this->getAdapter() 
    ->query("SELECT COUNT(*) AS total FROM visitors WHERE ...") 
    ->fetchAll(); 
$visits = $results[0]["total"]; 

使用表/界面選擇的每個查詢您不需要。


更新:+1從@SMka的註釋,指出這可能是更簡單:

$visits = $this->getAdapter() 
    ->fetchOne("SELECT COUNT(*) AS total FROM visitors WHERE ..."); 
+0

你最後一句話是一種解脫! – Owen

+1

我在Zend_Db_Select上工作過,並試圖在文檔中明確指出,當您需要從應用程序邏輯或變量逐個構建查詢時,界面將提供幫助。當你可以直接在字符串中拼出完整的SQL查詢時,不需要使用該接口。 * SQL已經是一個領域特定的語言。* –

+0

@Bill Karwin但解析SQL需要時間不會Zend_Db_Select與PDO擴展gona保存追索權? –

1

http://framework.zend.com/manual/en/zend.db.adapter.html

看到fetchOne

$this->setTableName('visitors'); 
$select = $this->select() 
       ->from('visitors') 
       ->columns(array('total' => new Zend_Db_Expr('COUNT(*)'))) 
       ->where('...'); 
$count = $this->getAdapter()->fetchOne($select); 
+0

這是否獲取所有數據,然後提供計數,或者只是獲取計數? – Owen

4
$count = $this->select()->from($this,'COUNT(*)')->query()->fetchColumn(); 
+0

這看起來很有趣,我在query()位添加了像count(mycol)這樣的東西嗎? – Owen

+0

不需要任何東西,如果你喜歡的話,你可以用'訪問者'取代$。 –

+0

好的,但我如何添加WHERE條件,是否查詢('WHERE ...')? – Owen

-1

如果你願意,你也可以只是fetchAll()或同等獲取整個行集,然後使用count()

$rows = $table->fetchAll(); 
$count = count($rowset); 

這可能是唯一的,如果你會做與行集別的東西的最佳解決方案,但。

+1

這是更糟糕的方式。只從表中獲取全部數目。如果表中有1kk記錄? ^) – SMka

+0

我同意,如果你只計算表中的記錄,這是一個糟糕的解決方案 - 這就是爲什麼我說「這可能只是最好的解決方案,如果你將使用該行集進行其他操作」。試圖證明你可以在Zend_Db_Table_Rowset中使用count()。 :) –

+1

if count only rowset - way two:'$ count = $ rowset-> count();':) – SMka

0

這裏亞去

public function fetchCount($data) 
{ 
    $sql = "SELECT COUNT(*) AS count FROM table WHERE field = ".$data; 

    $count = $this->db->fetchOne($sql, array('count')); 

    return $count; 
} 
相關問題