如何在codeigniter中选择最大值

时间:2018-05-09 04:30:43

标签: codeigniter

控制器:

$next_id = $this->o->next_id();
$data['next_id']=$next_id;

型号:

public function next_id(){
    $this->db->select_max('p_ori_id');
    $max = $this->db->get('orientation_master');
    if($max==0){
        $next_id = 1;
    }else{
        $next_id = 1+$max;
    }
    return $next_id;
}

返回错误:

  

类CI_DB_mysqli_result的对象无法转换为int

请解决问题..

3 个答案:

答案 0 :(得分:2)

希望这会对您有所帮助:

public function next_id()
{
   $this->db->select_max('p_ori_id', 'max');
   $query = $this->db->get('orientation_master'); 
   // Produces: SELECT MAX(p_ori_id) as max FROM orientation_master
   $max = $query->row()->max;
   if($max == 0){
     $next_id = 1;
   }else{
     $next_id = $max+1;
  }
  return $next_id;
}

更多信息:https://www.codeigniter.com/user_guide/database/query_builder.html

答案 1 :(得分:2)

对@pradeep没有冒犯,但如果你没有任何行,你可能会有一些意想不到的结果。我建议:

public function next_id()
{
   $this->db->select_max('p_ori_id', 'max');
   $query = $this->db->get('orientation_master');
   if ($query->num_rows() == 0) {
      return 1;
   }
   $max = $query->row()->max;
   return $max == 0 ? 1 : $max + 1;
}

答案 2 :(得分:1)

您收到该错误,因为$max是一个结果集对象,而不是您尝试使用它的整数记录值。

您可以尝试使用此功能获取下一个ID。

修改功能:

public function next_id(){
    $this->db->select_max('p_ori_id', 'max');
    $result = $this->db->get('orientation_master');
    $row = $result->row_array();
    $next_id = isset($row['max']) ? ($row['max']+1) : 1;
    return $next_id;
}

如果列是自动增量,则可以使用以下代码。

<强>替代:

public function next_id() {
        $sql_string = "SELECT `auto_increment` FROM INFORMATION_SCHEMA.TABLES WHERE table_name = '".$this->db->dbprefix."orientation_master'";
        $query = $this->db->query($sql_string);
        $row = $query->row_array();
        return $row['auto_increment'];
    }