我有多个用户帐户,每个帐户都为自己的事务运行增量整数集。
因此,每次用户打开交易时,我都会查询其交易中的最后一位数字加上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;
}
答案 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"]);