Реплицируйте запрос MYSQL JOIN с помощью Zend_Db join () - PullRequest
0 голосов
/ 06 января 2012

Привет, это мой sql-запрос

SELECT A.id, A.name, ACC.id, ACC.name
FROM accounts A
LEFT JOIN friends F ON A.id = F.account_id
LEFT JOIN accounts ACC ON F.friend_id = ACC.id
LIMIT 0 , 30

Как мне повторить это с помощью Zend_Db join?

Я создал эту функцию

function getFriends()
    {
        $query = $this->select()->setIntegrityCheck(false);
        $query->from(array('a'=>'accounts'),array('a.id','a.name','b.id','b.name'));
        $query->join(array('f'=>'friends'),'f.account_id = a.id',array());
        $query->join(array('b'=>'accounts'),'b.id = f.friend_id',array());
        $results = $this->fetchAll($query);
        return $results->toArray();
    }

Но она только возвращаетправая таблица, она не возвращает левую таблицу ...

1 Ответ

0 голосов
/ 07 января 2012

Если вы хотите использовать LEFT JOIN, вы должны использовать $query->joinLeft().

Sidenote; Из соображений производительности лучше использовать Zend_Db_Select вместо Zend_Db_Table, хотя выберите:

$query = $this->_db->select();
$query->from(array('a'=>'accounts'),array('account_id' => 'a.id', 'account_name' => 'a.name', 'friend_account_id' => 'b.id','friend_account_name' => 'b.name'));
$query->joinLeft(array('f'=>'friends'),'f.account_id = a.id',array());
$query->joinLeft(array('b'=>'accounts'),'b.id = f.friend_id',array());

return $this->_db->fetchAll($query);

Примечание: убедитесь, что все выбранные вами столбцы имеют уникальное имя. «a.id» и «b.id» оба приведут к имени столбца «id», в котором b.id перезапишет значение «a.id».

...