2010-11-23 48 views
0

我目前正在如何在Zend的Table對象上執行我的查詢並獲得一個Rowset作爲回報。我特別需要這個理由是因爲我正在修改現有項目的代碼,所以我沒有太大的靈活性。如何在表中使用子查詢執行查詢並在Zend中獲取Rowset對象?

查詢:

SELECT * 
     FROM `tblname` ud 
    WHERE ud.user_id = some_id 
     AND 
     (
      (ud.reputation_level > 1) 
      OR 
      (
       (SELECT COUNT(*) 
        FROM `tblname` t 
       WHERE t.user_id = ud.user_id 
        AND t.category_id <=> ud.category_id 
        AND t.city_id <=> ud.city_id 
       ) = 1 
      ) 
     ) 

有沒有辦法來形容使用選擇對象此查詢?

上一頁SQL解決方案是非常簡單,包括一個WHERE子句:

$where = $this->getAdapter()->quoteInto("user_id = ?",$user_id); 
return $this->fetchAll($where); 

我需要產生相同結果的類型(因此它可以通過現有的代碼進行處理),但對於更復雜的查詢。

事情我已經試過

$db = Zend_Db_Table::getDefaultAdapter(); 
return $db->query($sql)->fetchAll(); 
---------------- OR ---------------------- 
return $this->fetchAll($select); 
---------------- OR ---------------------- 
return $this->_db->query($sql)->fetchAll(); 

但他們要麼產生數組而不是對象或失敗,基數違規的消息。

我很感激任何關於如何在Zend中處理SQL文本查詢的幫助。

回答

1
$dbAdapter = Zend_Db_Table::getDefaultAdapter(); 

//change the fetch mode becouse you don't like the array 
$dbAdapter->setFetchMode(Zend_Db::FETCH_OBJ); 

$sql = "you're long sql here"; 
$result = $dbAdapter->fetchAll($sql); 
Zend_Debug::dump($result); 
exit; 

對於所有獲取模式列表去Zend_Db_Adapter

爲您查詢使用代替手工串Zend_Db_Select對象寫,看Zend_Db_Slect

相關問題