Codeigniter子查询加入

时间:2011-12-31 15:23:33

标签: database codeigniter activerecord

如何在活动记录中的codeigniter中编写以下查询?

选择tbl_list.id,tbl_list_items.name 来自tbl_list 加入tbl_list_items 在tbl_list_items.id =(从tbl_list_items中选择tbl_list_items.id,其中list_id = tbl_list.id,顺序为tbl_list_items.item_no asc LIMIT 1)

更新

这就是我提出的问题,但它不起作用。

$this->db->select($this->table_list.'.*');
$this->db->from($this->table_list);
$sub = $this->subquery->start_subquery('join','',$this->table_list_items.'.id');
$sub->select('id')->from($this->table_list_items)->where('list_id','tbl_list.id')->order_by($this->table_list_items.'item_no','asc')->limit('1');
$this->subquery->end_subquery('list_items');

感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分: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)

修改

修订后的代码如下所示。您还可以查看第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');

关键是这句话: $ this-&gt; subquery-&gt; end_subquery('tli'); 那里发生的是,它将子查询的结果视为 AS tli ,以便您可以在 tli.id 中引用它。

希望这有帮助!