2010-04-15 4 views
3

zend 프레임 워크에 대한 쿼리를 만들었습니다.이 쿼리에서는 열 (이 경우에는 'time')의 합계를 검색하려고합니다. 쿼리를 반향하는 것은이 권리 나에게 이야기Zend Framework SUM 쿼리의 값을 에코하는 방법

$this->timequery = $this->db_tasks->fetchAll($this->db_tasks->select()->from('tasks', 'SUM(time)')->where('projectnumber =' . $this->value_project)); 


$this->view->sumtime = $this->timequery; 

: 이것은 내가 사용하는 쿼리입니다. 그러나 결과를 적절하게 에코 할 수는 없습니다. 현재 내가 사용하고 있습니다 :

echo $this->sumtime['SUM(time)']; 

을 다음과 같은 오류 반환 :

Catchable fatal error: Object of class Zend_Db_Table_Row could not be converted to string in C:\xampp\htdocs\BManagement\application\views\scripts\tasks\index.phtml on line 46 

라인 (46) 내보기에 에코와 라인 인.

나는 이것을 알아내는 방법에 대해 이틀 동안 검색했거나 동일한 결과를 다른 방식으로 얻을 수있었습니다. 값을 직렬화하려고 시도했으나 작동하지 않았습니다.

데이터베이스 칼럼의 총합을 달성하는 방법을 아는 사람이 있습니까?

모든 도움이 크게 도움이됩니다.

참고 : 젠드 프레임 워크에 예쁜 새 ... 당신이 원하는 SQL은 아마도

답변

9

Zend_Db는 서로 다른 유형의 데이터를 가져 오기 위해 (사용중인) fetchAll 같은 멋진 유틸리티 방법이 있습니다 - 행

  • 그리고 FetchRow의 세트 -

    • fetchAll을위한 단일 행
    • 대하여 fetchone -

    대부분 단순히 하나의 셀 :

    $sum = $db->fetchOne('SELECT SUM(time) FROM tasks WHERE project_number = ?', $this->value_project); 
    

    당신은 당신의 질문에 같은도 이러한 방법으로 Zend_Db_Select 사용할 수 있습니다 다음 Zend_Db_Select 객체가 SQL을 생성하는 toString 메소드를 구현하므로

    //note that the SUM(time) part is passed as a Zend_Db expression, as it is not a column 
    $select = $this->db_tasks->select() 
             ->from('tasks', new Zend_Db_Expr('SUM(time)')) 
             ->where('projectnumber =' . $this->value_project); 
    
    $this->timequery = $this->db_tasks->fetchOne($select); 
    

    이 작동합니다.

  • +0

    안녕 데이빗, 우선 감사합니다! 하지만 여전히 오류가 발생합니다. 치명적 오류 : 정의되지 않은 메소드 호출 Application_Model_DbTable_Tasks :: fetchOne() 클래스에서 fetchOne을 찾을 수 없다는 의미입니까? fetchRow 또는 fetchAll로 다시 변경하면 문자열로 변환 할 수 없다는 오류가 발생합니다. 거의 다! –

    +1

    알아 낸 경우 : 마지막 문장의 길이는 입니다. $ this-> view-> timequery = $ this-> db_tasks-> getAdapter() -> fetchOne ($ select); 감사합니다. –

    +0

    아 - 나는 $ this-> db_tasks가 Zend_Db_Table이 아닌 데이터베이스 어댑터라고 가정했다. getAdapter를 사용하여 올바른 솔루션을 얻었습니다. –

    0

    :

    SELECT SUM(time) AS time_sum FROM tasks ... 
    

    젠드에서이 작업을 수행하는 방법을 확실하지. 그런 다음 :

    echo $this->sumtime['time_sum']; 
    
    +0

    이미 시도했지만 오류는 계속 발생합니다. 나는 쿼리가 잘된 것 같지만 결과를 적절한 방식으로 되풀이하지는 않습니다 ... –

    1
    $timequery= $timequeriestb->select(Zend_Db_Table::SELECT_WITH_FROM_PART) 
              ->columns('SUM(time) AS Totaltime') 
              ->where('projectnumber ='. $this->value_project));