0

私は mysql で必要な出力を与える次のクエリを持っています。今、クエリを実装するための異なるアプローチを持つ zend クエリ言語でそれを実装したいと思います..

SELECT A.NAME , B.PAYMENT , C.TOTALPROJ , D.TOTALTASK , T.ACTIVETASK , H.HOUR
FROM USERMASTER AS A 
LEFT OUTER JOIN
(
SELECT A.U_ID ,  SUM(A.TOTALTIME * B.RATE) AS PAYMENT
FROM 
(
SELECT U_ID , PROJECT_ID , 
SUM(TIME_TO_SEC(CASE WHEN endtime is null then timediff (starttime,starttime) 
ELSE timediff (endtime,starttime) END )) / 3600 AS TOTALTIME
FROM LOGMASTER AS A
WHERE PROJECT_ID IS NOT NULL
GROUP BY U_ID , PROJECT_ID
) AS A 
INNER JOIN PROJECTTOUSER AS B ON A.PROJECT_ID = B.PROJECT_ID AND A.U_ID = B.U_ID 
GROUP BY B.U_ID
) AS B ON A.ID = B.U_ID

LEFT OUTER JOIN 
(
  SELECT U_ID , COUNT(*) AS TOTALPROJ FROM PROJECTTOUSER GROUP BY U_ID
) AS C ON A.ID = C.U_ID

LEFT OUTER JOIN 
(
  SELECT ASSIGNED_TO , COUNT(*) AS TOTALTASK FROM TASKTOTARGET GROUP BY ASSIGNED_TO
) AS D ON A.ID = D.ASSIGNED_TO

LEFT OUTER JOIN 
(
  SELECT ASSIGNED_TO,COUNT(*) AS ACTIVETASK FROM TASKTOTARGET WHERE 
IS_ACTIVE = 0    GROUP BY ASSIGNED_TO
) AS T ON A.ID = T.ASSIGNED_TO

LEFT OUTER JOIN
(
  SELECT U_ID, SEC_TO_TIME(SUM(TIME_TO_SEC(CASE WHEN endtime is null then
 timediff (starttime,starttime) ELSE timediff (endtime,starttime) END ))) AS HOUR 
FROM LOGMASTER WHERE INSERT_DATE >= '2013-08-20' AND INSERT_DATE <='2013-08-31' 
GROUP BY U_ID
) AS H ON A.ID = H.U_ID

したがって、誰かが zend でこのクエリを作成する方法を教えてくれれば、それは非常に役に立ち、高く評価されます

4

1 に答える 1

1

各サブクエリは新しい Zend_Query になり、テーブルのように使用してメイン クエリに渡すことができます。

例えば:

$h = new Zend_Db_Select()
    ->from('LOGMASTER', array('U_ID', 'HOUR' => new Zend_Db_Expr('SEC_TO_TIME(SUM(TIME_TO_SEC(CASE WHEN endtime is null then
 timediff (starttime,starttime) ELSE timediff (endtime,starttime) END ))))')
    ->where("INSERT_DATE >= '2013-08-20'")
    ->where("INSERT_DATE <= '2013-08-31'")
    ->group('U_ID');

$mainQuery = new Zend_Db_Select()
      ->from('a' => 'USERMASTER', array('NAME'))
      ->joinLeft($h, 'A.ID = H.U_IS', array('HOUR'));

各サブクエリを独自のオブジェクトとして作成し、それらをメイン クエリに結合できます。join 関数の最後の引数は、サブクエリのどの列をメイン クエリに追加するかです。

ZF の流動的なインターフェースを使用すると、クエリ全体を作成するまでテーブル/クエリを結合し続けることができます。

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

于 2013-09-04T13:22:26.263 に答える