Multiple Sub Query with zend framework

南楼画角 提交于 2019-12-06 11:36:25

问题


there i am looking for a solution of problem that i am facing in zend apllication,

i am using zf 1.12 and php 5.3 with my sql,

Here is My Query Which runs perfectly in My SQL

SELECT usermaster.*, (select count(projecttouser.u_id) from projecttouser where 
usermaster.id=projecttouser.u_id  ) as proj,

(select count(tasktotarget.assigned_to) from tasktotarget where    
usermaster.id=tasktotarget.assigned_to  ) as target,

(select count(tasktotarget.assigned_to) from tasktotarget where 
usermaster.id=tasktotarget.assigned_to AND tasktotarget.is_active = 1  ) as active


from usermaster  group by usermaster.id

That Gives , Perfect Output Which i wanted but in my sql

now my problem is i have to convert that query in zend frame environment query,

which is some what different from the my sql format,

i have tried somethings as follow,

$psub=$this->select()
            ->setIntegrityCheck(false)
            ->from(array('p'=>'projecttouser'),array('count(p.u_id) as count')) 
            ->join(array('i'=>'usermaster'),'p.u_id=i.id') 
            ->where('i.id=p.u_id');

        $tsub=$this->select()
            ->setIntegrityCheck(false)
            ->from(array('t'=>'tasktotarget'),array('count(t.assigned_to) as tcount'))                     
            ->where('usermaster.id=tasktotarget.assigned_to');

        $tasub=$this->select()
            ->setIntegrityCheck(false)
            ->from(array('ta'=>'tasktotarget'),array('count(ta.assigned_to) as tacount'))                     
            ->where('usermaster.id=tasktotarget.assigned_to AND tasktotarget.is_active = 1 ');

        $sql=$this->select()
                ->setIntegrityCheck(false)                   
                ->from(array('u'=>'usermaster',$psub,$tsub,$tasub))
                 ->group('u.id')   
                 ->order($order_by . ' ' . $order)
                 ->where('u.is_delete=false');                     

        $resultSet = $this->fetchAll($sql);
        return $resultSet;

so , if anyone can help me create and format the query that will be very helpfull


回答1:


Try this one :

$psub=$this->db->select()
    ->setIntegrityCheck(false)
    ->from(array('p'=>'projecttouser'),array('count(p.u_id) as count'))
    //->join(array('i'=>'usermaster'),'p.u_id=i.id') // no need for this join
    ->where('usermaster.id=projecttouser.u_id');

$tsub=$this->db->select()
    ->setIntegrityCheck(false)
    ->from(array('t'=>'tasktotarget'),array('count(t.assigned_to) as tcount'))
    ->where('usermaster.id=tasktotarget.assigned_to');

$tasub=$this->db->select()
    ->setIntegrityCheck(false)
    ->from(array('ta'=>'tasktotarget'),array('count(ta.assigned_to) as tacount'))
    ->where('usermaster.id=tasktotarget.assigned_to AND tasktotarget.is_active = 1 ');

$sql=$this->db->select()
    ->setIntegrityCheck(false)
    ->from(array('u'=>'usermaster'), array('usermaster.*', 
            'proj' => new Zend_Db_Expr('(' . $psub . ')'),
            'target' => new Zend_Db_Expr('(' . $tsub . ')'),
            'active' => new Zend_Db_Expr('(' . $tasub . ')')))
    ->group('u.id')
    //->order($order_by . ' ' . $order)
    ->where('u.is_delete=false');

$resultSet = $this->fetchAll($sql);
return $resultSet;

Doc : http://framework.zend.com/manual/1.12/en/zend.db.select.html



来源:https://stackoverflow.com/questions/18250697/multiple-sub-query-with-zend-framework

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!