mysql - select count(*) 结果错误,缓存还是什么?

标签 mysql sql zend-framework

我有一个 sql 查询,其中我计算行数

SELECT count(*) AS `nr` FROM `ordine` WHERE (ditta_id = '3') AND (YEAR(`data`) = '2012') AND (stato = 'approvato' or stato = 'consegnato') LIMIT 1

我将一些行更改状态更新为“approvato”,有时 count() 给我正确的数字,有时它给我旧的数字

这是我的日志:

2012-03-23T10:42:45+01:00 DEBUG (7): Row id = 1809
2012-03-23T10:42:45+01:00 DEBUG (7): SELECT count(*) AS `nr` FROM `ordine` WHERE (ditta_id = '3') AND (YEAR(`data`) = '2012') AND (stato = 'approvato' or stato = 'consegnato') LIMIT 1
2012-03-23T10:42:45+01:00 DEBUG (7): Result = 140
...change stato into 'approvato' thus count must give me 141 next time, requery the row, check changes are saved


2012-03-23T10:44:52+01:00 DEBUG (7): Row id = 1810
2012-03-23T10:44:52+01:00 DEBUG (7): SELECT count(*) AS `nr` FROM `ordine` WHERE (ditta_id = '3') AND (YEAR(`data`) = '2012') AND (stato = 'approvato' or stato = 'consegnato') LIMIT 1
2012-03-23T10:44:52+01:00 DEBUG (7): Result = 140 ?!!! why not 141?

ditta_id、agente_id、stato 是索引

我正在使用 Zend Framework 1.11.11 和 MySQL 5.1.49-3

最佳答案

对于您更新的行,我假设以下条件之一为真...

  • ditta_id 不是 '3'
  • YEAR(数据) 不是 '2012'
  • stato 已经是 'approvato'
  • stato 已经是 'consegnato'
  • stato 中的新值有拼写错误

您能否在更改 stato 字段之前和之后向我们展示这些字段?

关于mysql - select count(*) 结果错误,缓存还是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9869850/

相关文章:

php - CakePHP 3 - 在自定义查找器中使用 IN...SELECT

php - SQL数据库不存储用户输入

java - 将 SQL 列存储到 java 数组中

php - Zend Framework 和 Cubique 网格 - LEFT OUTER JOIN

unit-testing - 使用 PHPUnit 3.5 测试时出错

Php 不在数据库中创建用户

MySQL 和 ORACLE 性能 - SELECT + 检索行 + DELETE 与 DELETE WHERE SELECT FROM

sql - 如何更新 Azure Cosmos DB 中的集合

sql - 在时间间隔内选择第一行和最后一行

zend-framework - 潜在 Zend Framework 开发人员的编程问题