1
我实现时间在Zend框架跟踪系统,如何为Zend框架设置Mysql查询的格式?
在,我有以下的Zend的查询来实现:
SELECT
u_id,
SEC_TO_TIME(SUM(CASE WHEN TotalTime > 32400
THEN TotalTime - 28800
ELSE 0 END)) as OverTime,
SEC_TO_TIME(SUM(TotalTime)) AS TotalTime
FROM
(
SELECT
u_id, insert_date,
SUM(TIME_TO_SEC(CASE WHEN endtime IS NULL
THEN timediff(starttime, starttime)
ELSE timediff(endtime, starttime)
END)) AS TotalTime
FROM
logmaster
WHERE
project_id IS NOT NULL
AND logmaster.u_id =1028
AND insert_date >('2013-04-01') AND insert_date <('2013-04-31')
GROUP BY U_ID,insert_date
) AS A
哪位能给我输出是这样的:
u_id OverTime TotalTime
-------------------------------------
1028 03:53:58 105:16:20
现在我的问题是我必须在zend框架中实现此查询,因为我已经这样试过:
public function gettotallog()
{
$sql=$this->select()
->setIntegrityCheck(false)
->from(array('u'=>'logmaster'),array('id','project_id','u_id','insert_date',
"SEC_TO_TIME(SUM(CASE WHEN TotalTime > 32400
THEN TotalTime - 28800
ELSE 0
END)) as OverTime , SEC_TO_TIME(SUM(TotalTime)) AS TotalTime
FROM
(
SUM(TIME_TO_SEC(
CASE WHEN endtime IS NULL
THEN timediff(starttime, starttime)
ELSE timediff(endtime, starttime)
END)) AS TotalTime
) AS A"
))
->joinleft(array('a'=>'projectmaster'), 'u.project_id = a.id', array('pname'=>'name'))
->join(array('i'=>'usermaster'),'u.u_id=i.id',array('uname'=>'name'))
->where("u.insert_date >='$yr-$mh-1' AND u.insert_date <='$yr-$mh-31'")
->where("u.project_id!='NULL'")
->where("u.u_id='$uid'")
->where('u.is_delete=false')
->group('u.u_id');
$resultSet = $this->fetchAll($sql);
return $resultSet;
}
但它显示的错误是这样的:
异常信息:
消息:SQLSTATE [42000]:语法错误或访问冲突:1064您 在您的SQL语法错误;检查对应于 你的MySQL服务器版本的“当结束时间IS NULL SUM( TIME_TO_SEC(CASE”在行权语法附近使用手册7
谁能帮我这个好吗?
没关系得到了解决
public function gettotallog($uid,$yr,$mh)
{
$subsql=$this->select()
->setIntegrityCheck(false)
->from(array('u'=>'logmaster'),array('u_id','insert_date',
"SUM(TIME_TO_SEC(
CASE WHEN endtime IS NULL
THEN timediff(starttime, starttime)
ELSE timediff(endtime, starttime)
END)) AS TotalTime"
))
->join(array('i'=>'usermaster'),'u.u_id=i.id',array('uname'=>'name'))
->where("u.insert_date >='$yr-$mh-1' AND u.insert_date <='$yr-$mh-31'")
->where("u.project_id!='NULL'")
->where("u.u_id='$uid'")
->where('u.is_delete=false')
->group('u.insert_date');
$sql=$this->select()
->setIntegrityCheck(false)
->from(array('u'=>$subsql),array("u_id,uname,insert_date,SEC_TO_TIME(SUM(CASE WHEN TotalTime > 32400
THEN TotalTime - 28800
ELSE 0
END)) as OverTime , SEC_TO_TIME(SUM(TotalTime)) AS TotalTime"
));
$resultSet = $this->fetchAll($sql);
return $resultSet;
}
得到我需要的解决方案中,,工作就像魅力!更新了答案的问题.. –
也许你可以将你的解决方案转化为答案并接受答案 - 这样一来,这个问答组合就会成为一个接受答案的问题 - 你也许会得到更多的分数! – goredwards