使用MAX查询

时间:2017-08-18 14:14:15

标签: php mysql codeigniter

我有多个用户帐户,每个帐户都为自己的事务运行增量整数集。

因此,每次用户打开交易时,我都会查询其交易中的最后一位数字加上1.

但是,有时我发现结果是从另一个用户事务中返回最大ID。据推测,用户A的最后一个ID = 5402,而用户Z的最后一个ID = 19201.有时,用户A得到19202而不是5403。

这是我的疑问:

SELECT MAX(CAST(id AS UNSIGNED)) as max_id FROM `transaction` WHERE `user_id` = 'A'

交易表如下: id INT PK user_id INT ......等等。

这是一个Web应用程序,多个用户同时连接,我使用mysql作为数据库,php作为编程语言。

我使用CI,这是我用来获取最大ID的代码

function get_max($table, $max_col, $col_id = NULL, $id = NULL) {
    if (!empty($col_id) && !empty($id)) {
        $this->db->where($col_id, $id);
    }
    $this->db->select("MAX(CAST($max_col AS UNSIGNED)) as max_$max_col");
    $query = $this->db->get($table);

    if ($query->num_rows() > 0) {
        return intval($query->row_array()["max_$max_col"]);
    }
    return 0;
}

一旦我获得了id,我插入如下:

$new_data['id'] = $this->model_share->get_max('transaction', 'id', 'user_id', $user_id) + 1;
$new_data['user_id'] = $user_id;

$this->model_share->insert('transaction', $new_data); // save data

这是插入函数的详细信息

function insert($table, $data) {
    $this->db->insert($table, $data);

    $id = $this->db->insert_id();
    if ($id <= 0)
        return $this->db->affected_rows() > 0;
    else return $id;
} 

1 个答案:

答案 0 :(得分:1)

Codeigniter有一个查询函数,用于从数据库表$this->db->select_max()

的列中获取最大值
$this->db->select_max('your_column');
$query = $this->db->get('table'); 

对于数据库事务,在开始任何查询之前添加它,并在最后一次查询时结束它。

$this->db->trans_start();
$this->db->query('AN SQL QUERY...');
$this->db->query('ANOTHER QUERY...');
$this->db->query('AND YET ANOTHER QUERY...');
$this->db->trans_complete();

注意:当您在执行许多与数据库相关的查询时使用数据库事务非常有用,例如您正在插入内容然后在它之前进行更新。

这是参考链接

编辑:

由于max_$max_col这个行,您在此行中出现语法错误。

//Error Line1
 $this->db->select("MAX(CAST($max_col AS UNSIGNED)) as max_$max_col");

//Error Line 2
 return intval($query->row_array()["max_$max_col"]);