2012-08-16 3 views
1

Как написать этот запрос в ZendSELECT COUNT + (SELECT COUNT FROM TABLE1 WHERE) FROM TABLE1 в Zend

SELECT COUNT(1) AS `NoOfQueries` , DATE(CONVERT_TZ(FROM_UNIXTIME(poocher.cdate, '%Y-%m-%d %T') , '-9:30', '+00:00')) AS `Dat` , COUNT(1) + ( 
    SELECT COUNT(1) 
    FROM tblsmsuser poocherb4 
    WHERE DATE(CONVERT_TZ(FROM_UNIXTIME(poocherb4.cdate, '%Y-%m-%d %T') , '-9:30', '+00:00')) <= DATE_SUB( `Dat` , INTERVAL 1 
    DAY)) AS cumulative_sum 
FROM tblsmsuser poocher 
GROUP BY `Dat` 

То, что я пытался это

$this->select = new Zend_Db_Select($this->db); 
$selctSub = $this->select->from("tblsmsuser",array("count(1)"))->where("DATE(CONVERT_TZ(FROM_UNIXTIME(tblsmsuser.cdate, '%Y-%m-%d %T') , '-9:30', '+00:00')) <= DATE_SUB( Dat , INTERVAL 1 DAY)"); 
echo $select_query_ans = $this->select->from(array("poocher" =>"tblsmsuser"),array("NoOfQueries"=>"count(1)","Dat"=>"DATE(CONVERT_TZ(FROM_UNIXTIME(poocher.cdate,'%Y-%m-%d %T'),'-9:30','+00:00'))","cumulative_sum"=>"count(1) + (".$selctSub.")"))->group("Dat"); 

Выход

SELECT count(1) AS `NoOfQueries`, DATE(CONVERT_TZ(FROM_UNIXTIME(poocher.cdate,'%Y-%m-%d %T'),'-9:30','+00:00')) AS `Dat`, count(1) + (SELECT count(1) AS `NoOfQueriesb4` FROM `tblsmsuser` AS ```poocherb4`` WHERE (DATE(CONVERT_TZ(FROM_UNIXTIME(poocherb4.cdate, '%Y-%m-%d %T') , '-9:30', '+00:00')) <= DATE_SUB(Dat , INTERVAL 1 DAY)))`, count(1) AS `NoOfQueriesb4` FROM `tblsmsuser` AS `poocher` INNER JOIN `tblsmsuser` AS `` WHERE (DATE(CONVERT_TZ(FROM_UNIXTIME(poocherb4.cdate, '%Y-%m-%d %T') , '-9:30', '+00:00')) <= DATE_SUB(Dat , INTERVAL 1 DAY)) GROUP BY `Dat` 
+2

Я даже не собираюсь разбирать этот запрос, мой sql не подходит. Однако вы, скорее всего, получите прибыль от использования [Zend_Db_Expression] (http://framework.zend.com/manual/en/zend.db.select.html#zend.db.select.building.columns-expr) в этом запросе , – RockyFord

+0

@RockyFord Большое спасибо http://framework.zend.com/manual/en/zend.db.select.html#zend.db.select.building.columns-expr сделал трюк – Wazzzy

+0

Положите свое решение в ответ, вы можете принять свой собственный ответ. Это может помочь кому-то другому. – RockyFord

ответ

0

Вот код, который работал для меня

$this->select = new Zend_Db_Select($this->db); 
    $selctSub = $this->select->from("tblsmsuser",array("count(1)"))->where("DATE(CONVERT_TZ(FROM_UNIXTIME(tblsmsuser.cdate, '%Y-%m-%d %T') , '-9:30', '+00:00')) <= DATE_SUB( Dat , INTERVAL 1 DAY)"); 
    $this->select = new Zend_Db_Select($this->db); //ADDED line 
    echo $select_query_ans = $this->select->from(array("poocher" =>"tblsmsuser"),array("NoOfQueries"=>"count(1)","Dat"=>"DATE(CONVERT_TZ(FROM_UNIXTIME(poocher.cdate,'%Y-%m-%d %T'),'-9:30','+00:00'))","cumulative_sum"=>"count(1) + (".$selctSub.")"))->group("Dat"); 
Смежные вопросы