【问题标题】:Codeigniter subquery joinCodeigniter 子查询连接
【发布时间】:2011-12-31 15:23:32
【问题描述】:

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

选择 tbl_list.id、tbl_list_items.name 来自 tbl_list 加入 tbl_list_items on tbl_list_items.id=(select tbl_list_items.id from tbl_list_items where list_id=tbl_list.id order by 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');

感谢任何帮助。谢谢。

【问题讨论】:

  • 最后把语句改成select tbl_list.id, tbl_list_items.name from tbl_list join tbl_list_items on tbl_list_items.id=(select tbl_list_items.id from tbl_list_items where listing_id=tbl_list.id order by item_no asc LIMIT 1) ;活动记录似乎对此更满意。
  • 您始终可以将 Active Record 与直接的 SQL 语句一起使用。但是,您并没有利用将语句分解为可互换的组件。

标签: database codeigniter activerecord


【解决方案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->subquery->end_subquery('tli'); 那里发生的情况是,它将子查询的结果视为 AS tli,以便您可以在 tli.id 中引用它。

希望这有帮助!

【讨论】:

  • 我没有得到第三行,tbl_list_items.id 不等于 tbl_list.id 而是选择。我阅读了文档,但它没有显示从加入开始就进行子查询的方式。任何建议。
  • 在第三行试试这个: $sub = $this->subquery->start_subquery('join', tbl_list_items.id = list_ids');对于查询的其余部分,创建一个使用 '...AS 'list_ids' 的 SELECT 语句。今天晚些时候我会写出来。
  • 更新了 CI 中 AR 子查询库的链接和带有解释的新代码库。
猜你喜欢
  • 2018-08-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2013-09-14
  • 2010-09-13
  • 1970-01-01
  • 2011-11-25
相关资源
最近更新 更多