Перепишите SQL-запрос в Zend_Db_Select - PullRequest
2 голосов
/ 21 марта 2012

Я пытаюсь построить следующий 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.

Можно ли достичь того же результата с помощью объединений вместо подзапросов?

Любые советы о том, как получить эту работу, будут высоко оценены.

1 Ответ

0 голосов
/ 21 марта 2012

Попробуйте что-то вроде этого:

$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());
...