2010-11-17 77 views
1

我有以下選擇:MySQL的選擇(Zend Framework的DB選擇)

public function fetchFooSum($id) 
    { 
     $db = Zend_Registry::get('dbAdapter'); 
     $select = $db->query("SELECT SUM(prod) FROM `output` WHERE loc_id IN (SELECT loc_id FROM `locations` WHERE location_id = ".$id.");"); 

     return $select->fetchAll(); 
    } 

我對此有2個問題:

  1. 這被認爲是一個合理可接受的方式來形成這樣的查詢?

    SELECT SUM(prod) FROM output WHERE loc_id IN (SELECT loc_id FROM locations WHERE location_id = ".$id."); 
    

    或者是不理想(我應該使用這樣的一些其他的方式......一個加入或工會或者說,我聽說過,但我並不清楚何時使用諸如此類的東西).. 。

  2. 在Zend Framework中,你將如何制定這樣的查詢?

的方法,我使用的作品,但我懷疑它是這樣做(作爲一個普通的SQL查詢,並在我的方式做到這一點Zend框架內)的理想方式。

有關查詢或如何更好地在ZF中實現它的任何意見,讚賞。

回答

1

我寧願一個內連接來使用IN操作符此查詢,因爲我相信將超越您的查詢目前的形式(但還沒有一個參考,爲什麼:)

// example using Zend_Db_Select 
$select = $db->select() 
      ->from('output', array('sum(prod)')) 
      ->join('locations', 'output.loc_id = locations.loc_id', array()) 
      ->where('locations.location_id = ?', $id); 

// to dump query 
print_r($select->__toString()); 

// to execute 
$result = $db->fetchOne($select); 

我強烈建議您閱讀Zend_Db_Select文檔,其中有許多實用的示例 - 不應超過一個小時。

1

你的代碼不算太壞。

$sum = $db->fetchOne(<<<SQL 
    SELECT SUM(prod) 
    FROM `output` 
    WHERE loc_id IN (
     SELECT loc_id 
     FROM `locations` 
     WHERE location_id = {$db->quote($id)} 
    ); 
SQL 
);