使用Zend_Db join()复制MYSQL JOIN查询

时间:2012-01-06 17:27:37

标签: mysql database join abstract zend-framework

嗨,这是我的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 :(得分:0)

如果您想使用LEFT JOIN,则应使用$query->joinLeft()

旁注;出于性能原因,您最好使用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的值。