2012-03-21 28 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