【问题标题】:How to use "MAX" in codeigniter where?如何在codeigniter中使用“MAX”?
【发布时间】:2015-03-20 05:21:57
【问题描述】:

$this->db_selec_max(); for select max element from row set in select,但我想在 where 中使用 max。如何在codeigniter中使用“MAX”?我想将以下查询转换为 codeigniter 形式

我的查询

SELECT rq_id, rq_plant_4sale_code, rq_serial_number, rq_quantity_requested, rq_requester_farm_id, 
         rq_fulfiller_farm_id, rqpri_description, rqrem_remark,rqrem_remark_datetime, rq_created_datetime, 
         plsal_name_botanical, plsal_name_english, pot_code, rqpri_description 
         FROM (reqn_requisitions)
         LEFT JOIN reqn_requisition_priorities ON(rq_priority_rank=rqpri_rank)
         LEFT JOIN reqn_requisition_remarks ON(rq_id=rqrem_reqn_id)
         LEFT JOIN tukai_plants_4sale ON(rq_plant_4sale_code=plsal_id)
         LEFT JOIN tukai_pots ON(plsal_pot_id=pot_id)
         WHERE rqrem_remark_datetime IN(SELECT MAX(rqrem_remark_datetime) AS dt FROM reqn_requisition_remarks         GROUP BY rqrem_reqn_id ) AND rq_challan_id=0'

我正在尝试这样

$this->db->select("rq_id, rq_plant_4sale_code, rq_serial_number, rq_quantity_requested, rq_requester_farm_id, 
     rq_fulfiller_farm_id, rqpri_description, rqrem_remark,rqrem_remark_datetime, rq_created_datetime, 
     plsal_name_botanical, plsal_name_english, pot_code, rqpri_description ");

               $this->db->join('tukai_plants_4sale', 
               'tukai_plants_4sale.plsal_id = reqn_requisitions.rq_plant_4sale_code','left');
               $this->db->join('tukai_pots', 
               'tukai_pots.pot_id = tukai_plants_4sale.plsal_pot_id','left');
               $this->db->join('reqn_requisition_remarks', 
               'reqn_requisition_remarks.rqrem_reqn_id = reqn_requisitions.rq_id','left');


$this->db->order_by("rq_id","desc");

【问题讨论】:

  • 没有子查询只返回最大元素
  • 哦,对不起,你在哪里卡住了。你有错误还是只需要转换查询'
  • 需要转换查询
  • 那么你在哪里卡住了,我想你想实现 where 条件
  • 您能否确定您的表格的别名

标签: mysql codeigniter


【解决方案1】:

对于复杂的where clause条件可以使用,

$this->db->where('<where condition here>', NULL, FALSE);

来自docs

$this->db->where() 接受可选的第三个参数。如果您将其设置为 FALSE,CodeIgniter 将不会尝试使用反引号保护您的字段或表名称。


试试下面的代码:

/* Replace table_name with appropriate table names */

$this->db->select("table_name.rq_id, table_name.rq_plant_4sale_code, table_name.rq_serial_number, table_name.rq_quantity_requested, table_name.rq_requester_farm_id, 
 table_name.rq_fulfiller_farm_id, table_name.rqpri_description, rqrem_remark,table_name.rqrem_remark_datetime, table_name.rq_created_datetime, 
 table_name.plsal_name_botanical, table_name.plsal_name_english, table_name.pot_code, table_name.rqpri_description ");

$this->db->from('reqn_requisitions');

$this->db->join('reqn_requisition_priorities','reqn_requisitions.rq_priority_rank = reqn_requisition_priorities.rqpri_rank','left');
$this->db->join('reqn_requisition_remarks','reqn_requisition_remarks.rqrem_reqn_id = reqn_requisitions.rq_id','left');
$this->db->join('tukai_plants_4sale','tukai_plants_4sale.plsal_id = reqn_requisitions.rq_plant_4sale_code','left');
$this->db->join('tukai_pots','tukai_pots.pot_id = tukai_plants_4sale.plsal_pot_id','left');

$this->db->where('reqn_requisition_remarks.rqrem_remark_datetime IN(SELECT MAX(rqrem_remark_datetime) AS dt FROM reqn_requisition_remarks GROUP BY rqrem_reqn_id', NULL, FALSE);

$this->db->where('table_name.rq_challan_id', 0);

$this->db->order_by("table_name.rq_id","desc");

$query = $this->db->get();

return $query->result();


另一种选择:

如果您的查询(无论如何)无法使用 CI's Active Record 编写,您始终可以使用简单的方法:

$this->db->query('<your SQL query here>');

例如:

$query = $this->db->query('SELECT rq_id, rq_plant_4sale_code, rq_serial_number,rq_quantity_requested, rq_requester_farm_id,rq_fulfiller_farm_id, rqpri_description,rqrem_remark,rqrem_remark_datetime, rq_created_datetime, 
     plsal_name_botanical, plsal_name_english, pot_code, rqpri_description 
     FROM (reqn_requisitions)
     LEFT JOIN reqn_requisition_priorities ON(rq_priority_rank=rqpri_rank)
     LEFT JOIN reqn_requisition_remarks ON(rq_id=rqrem_reqn_id)
     LEFT JOIN tukai_plants_4sale ON(rq_plant_4sale_code=plsal_id)
     LEFT JOIN tukai_pots ON(plsal_pot_id=pot_id)
     WHERE rqrem_remark_datetime IN(SELECT MAX(rqrem_remark_datetime) AS dt FROM reqn_requisition_remarks GROUP BY rqrem_reqn_id ) AND rq_challan_id=0');

return $query->result();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-25
    • 2017-04-07
    • 1970-01-01
    • 2020-03-07
    • 2018-09-10
    • 2019-05-18
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多