php - cakephp查询1.1中MYSQL Max记录不正确

标签 php mysql cakephp

我有一个场景,我需要找到一个高于最后一个最高数字的数字,然后将该数字插入到新行中,并且必须根据 2 个 if 语句完成两次 我为此使用 mysql max 像:

if(condtn1){
    $maxNum = $this->model->query('SELECT SQL_NO_CACHE max(qte_number) + 1 as newQuoteNumber FROM qtes LIMIT 1');
 $this->model->save($data) // the max number caluclated above inserts here and is visible in DB
}
if(condtn2){
    $maxNum = $this->model->query('SELECT SQL_NO_CACHE max(qte_number) + 1 as newQuoteNumber FROM qtes LIMIT 1');
 $this->model->save($data); //simillar case with some values different in data array 
}

我假设第一个条件下保存的数字现在将充当第二个条件下我需要的数字的基础。 就像第一个生成了 200 并保存在数据库中一样,所以在第二个条件下它应该是 201,但在这两个条件下它仍然是 200。 我尝试了一些缓存选项来禁用缓存,例如

$this->cacheQueries = false; 

并且还手动将其从 tmp 文件夹中删除,但没有效果。

谢谢大家。

最佳答案

显然您正在尝试创建所谓的“无间隙序列”。

但是,由于您使用两个单独的查询来实现这一点(首先计算 max(x) + 1,然后使用该值插入新记录),因此您面临着机会的风险计算出的值不再是正确的值;在您计算新数字和插入新记录之间,其他人可能创建了一条新记录。

更好的选择可能是让数据库在插入期间为您计算值。您可以使用“触发器”来做到这一点; Stackoverflow 上的这个问题做了类似的事情,并且可能为您提供实现此目标的正确指示;

MySQL trigger to set column to max + 1 not working

将创建新 ID 的责任留给数据库还有一个优点,无论您使用什么工具插入数据,数据库将始终确保正确的 ID/序列已生成。

因此,即使您通过 MySQL shell 或使用 PhpMyAdmin 插入新记录,数据库也会自动生成新编号。

关于php - cakephp查询1.1中MYSQL Max记录不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14999896/

相关文章:

php - 更新 while 循环中的所有行

php - 如何在 JavaScript 或 jQuery 中访问 PHP 变量而不是 <?php echo $variable ?>

php - 如何每隔x分钟自动删除?

php - 尝试将 CakePHP Find() 转换为 MySql 语句

php - 通过引用传递是否避免创建新变量?

PHP - 为什么没有捕捉到这个 fatal error ?

php - 如何找到 mySQL 行之间的相似性?

mysql - 如何在只有一列是查询基础的 MySQL 中进行数据透视

php - CakePHP 2.x 基于 HasMany 表记录的 Order By desc

cakephp - 你如何使用composer cli?