2012-03-21 79 views
2

我试图建立如下的sql查询作为Zend_Db_Select对象对象重写SQL查询Zend_Db_Select对象

$sql = " 
    SELECT 
     u.id, 
     u.email, 
     s.nic as nic, 
     (SELECT COUNT(*) FROM event WHERE user_id = u.id AND event='login') as logins, 
     (SELECT COUNT(*) FROM event WHERE user_id = u.id AND event='export') as exports, 
     (SELECT MAX(time) FROM event WHERE user_id = u.id AND event='login') as lastlogin, 
     (DATEDIFF(u.expire_date, NOW())) as daysleft 
    FROM 
     user u, 
     seller s 
    WHERE 
     u.seller_id = s.id"; 

没有运气。我无法获得在Zend_Db_Select对象中工作的subquerys。

是否有可能通过连接而不是subquerys实现相同的结果?

任何提示如何得到这个工作将不胜感激。

+0

为什么不子查询工作?你是如何组装它们的?你是如何将它们装配到最终选择对象中的? – bububaba 2012-03-21 15:24:02

回答

0

尝试这样:

$select->from(array('u'=>'user'),array('id','email')); 
$select->join(array('s'=>'seller'),'s.id = u.seller_id', array('nic')); 
$select->columns(array(
    'logins' =>"(SELECT COUNT(*) FROM event WHERE user_id = u.id AND event='login')", 
    'exports' =>"(SELECT COUNT(*) FROM event WHERE user_id = u.id AND event='export')", 
    'lastLogin' =>"(SELECT MAX(time) FROM event WHERE user_id = u.id AND event='login')", 
    'daysLeft' =>"(DATEDIFF(u.expire_date, NOW()))",)); 
$stmt = $select->query(); 
var_dump($stmt->fetchAll()); 
+0

非常感谢@ just-h将子查询放入$ select-> columns()中解决它。我曾尝试过几种将它们放入from()数组的方法,但所有这些方法都返回了sql错误。 – 2012-03-21 21:25:42