2011-12-31 16 views
0

どのようにして、次のクエリでアクティブレコードのcodeigniterに書き込むのですか?Codeigniterサブクエリ結合

選択tbl_list.id、tbl_list からtbl_list_items.nameはtbl_list_items.id =でtbl_list_items に参加(tbl_list_items.item_no ASCのLIMIT 1 LIST_ID = tbl_list.idためtbl_list_itemsからtbl_list_items.idを選択)

更新:

これは私が出てくるものですが、それは仕事をしません。

​​

ありがとうございました。ありがとう。

+0

最後tbl_list からtbl_list_items.nameはtbl_list_items.id =(item_no ASCのLIMIT 1 listing_id = tbl_list.idためtbl_list_itemsからtbl_list_items.idを選択)にtbl_list_items に参加、 選択tbl_list.idにステートメントを変更し、 アクティブなレコードがこれでさらに満足しているようです。 –

+0

Active Recordは、まっすぐなSQL文でいつでも使用できます。しかし、あなたは、ステートメントを交換可能なコンポーネントに分解することを利用していません。 –

答えて

1

Review the Active Record methods available to you in CodeIgniter.

Then review a CI library to extend it to handle subqueries available on CodeIgniter

There is a walk-through about how CI is doing this under-the-hood

Found a github codebase for implementing subqueries in CodeIgniter 1.7 and 2.x (see link)

EDIT:

改訂コードは、アシスに下回っていますt。また、第4リンクの例を見ることもできます。

$this->db->select('tbl_list.id, tbl_list.names'); 
$this->db->from('tbl_list'); 
$sub = $this->subquery->start_subquery('join', 'left', 'tli.id = tbl_list.id'); 
$sub->select('tbl_list_items.id')->from('tbl_list_items')->where('tbl_list_items.list_id=tbl_list.id '); 
$sub->db->order_by('ASC'); 
$sub->db->limit(1); 
$this->subquery->end_subquery('tli'); 

キーはこれです:

you'erがやろうと何を複製するには、コードは(これは未テストです...しかし、うまくいけば、正しい道にあなたを開始します)のようになりますステートメント:$ this-> subquery-> end_subquery( 'tli'); サブクエリの結果をAS tliとして扱い、tli.idで参照できるようにします。

これが役に立った!

+0

私は3行目を取得しません、tbl_list_items.idはtbl_list.idと同じではなく、選択します。私はドキュメントを読んでいますが、結合から右にサブクエリする方法は示されていません。アドバイス。 –

+0

3行目でこれを試してください:$ sub = $ this-> subquery-> start_subquery( 'join'、tbl_list_items.id = list_ids ');残りのクエリについては、 '... AS' list_ids 'を使用するSELECT文を作成します。今日はあとで書きます。 –

+0

CIでARのサブクエリライブラリへのリンクと説明付きの新しいコードベースに更新されました。 –