嗨,这是我的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();
}
但它只返回正确的表,它不会返回左表...
答案 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的值。