2012-01-06 6 views
0

こんにちは、これは私がZend_Dbの参加使って、これを複製するにはどうすればよい私のSQLクエリ複製MYSQL)(参加はZend_Dbでクエリを登録しよう

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 

のですか?

私は

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

あなたがLEFT JOINを使用する場合は、$query->joinLeft()を使用する必要があります。

サイドノート;パフォーマンス上の理由から、あなたはZend_Db_Tableの代わりにZend_Db_Selectを使用する方がよいでしょうけれども選択:

$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'はどちらもb.idがa.idの値を上書きする列名 'id'を生成します。

+0

私はあなたが私はphpMyAdminでSQLを実行する場合、それは4列のテーブルを返す必要がありますので、あなたが私の質問で見ることができるように、私はジョイントを行う方法を知っている、左または右の前提はこの時点で重要ではありません。 Zend DBは、最初の2つの列のみを返します。私は同じことを2回クエリすることでこれを解決できますが、どうぞ...だれでもやりたいことがあり、良いプログラミングスタイルではありません。 – shiva8

+0

選択したすべての列に一意の名前が付いていることを確認してください。私は私の答えを更新しました。 – Pieter

関連する問題