根据具有多个连接的最新日期选择行-Code Ignitor

Posted

技术标签:

【中文标题】根据具有多个连接的最新日期选择行-Code Ignitor【英文标题】:Select rows based on latest date with multiple joins -Code Ignitor 【发布时间】:2020-03-15 22:31:54 【问题描述】:

我的代码运行正常但速度很慢:

我的代码是:

    $this->db->select('BaseTbl.id');
    $this->db->from('tbl_all_calls as BaseTbl');
    $this->db->join('tbl_remark_info1 as Remarks','Remarks.id = (select max(id) from 
    tbl_remark_info1 as e2 where e2.cid=BaseTbl.id)','left');

    $this->db->where('BaseTbl.callcode', $num);
    $this->db->where('BaseTbl.deskid', $deskid);
    $this->db->where('Remarks.remarkDate<=',date('Y-m-d'));
    $this->db->where('Remarks.taken', 1);
    $this->db->where('BaseTbl.createdDtm!=', date('Y-m-d'));
    $this->db->group_by('BaseTbl.mobile');
    $this->db->order_by('remarkDate', 'DESC');
    $query = $this->db->get();
    $result = $query->num_rows();      
    return $result;

如何提高性能?

【问题讨论】:

你检查在mysql中运行这个sql了吗? 如果您只返回计数,那么为什么需要 order 或 group by,因为 total num_rows 将是一个值或? 可以在 sql 中运行,但运行缓慢。你能在 CI 中给出查询,返回加入表中的最新记录吗? 为表字段提供索引会增加执行时间。 【参考方案1】:

您可以尝试为以下列添加索引,因为它会显着提高搜索速度。

    Remarks.id
    Remarks.taken
    BaseTbl.deskid
    e2.cid

【讨论】:

你能提供创建索引的例子吗?

以上是关于根据具有多个连接的最新日期选择行-Code Ignitor的主要内容,如果未能解决你的问题,请参考以下文章

选择连接表上的最近日期

如何选择具有最新日期的行并根据该行计算另一个字段

根据最大日期获取每组的最新行

如何编辑我的 postgreSQL 查询以按日期选择几列的最新行

从数据库中选择多个货币代码的最新汇率的最佳方式

具有多个组件的动态 PickerView:索引超出范围