Mysql 可以从表中选择,但不能计算行数

Mysql 可以从表中选择,但不能计算行数,mysql,Mysql,我一直在为一个一次性项目运行一个小型MySQL数据库,并为一位同事转储了该文件,他能够让所有东西都运行起来 我们使用C,运行两个查询,其中一个是: SELECT * FROM someview LIMIT 20 OFFSET 0; 另一个是: SELECT COUNT(*) FROM someview; 我将使用SELECT SQL\u CALC\u FOUND\u ROWS*和FOUND\u ROWS,但在MySQLDataReader的存储过程之外,显然不支持这一点 无论如何,问题是,这

我一直在为一个一次性项目运行一个小型MySQL数据库,并为一位同事转储了该文件,他能够让所有东西都运行起来

我们使用C,运行两个查询,其中一个是:

SELECT * FROM someview LIMIT 20 OFFSET 0;
另一个是:

SELECT COUNT(*) FROM someview;
我将使用SELECT SQL\u CALC\u FOUND\u ROWS*和FOUND\u ROWS,但在MySQLDataReader的存储过程之外,显然不支持这一点

无论如何,问题是,这两个查询在我的系统上都可以正常工作。在his上,第一个工作正常,但SELECT COUNT*语句失败,出现以下错误:

Error Code: 1356. View 'db.someview' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
我们检查了SHOW GRANTS的结果,并且拥有相同的权限,两者都以相同的用户根运行。这不是C语言的问题,因为如果他在MySQL命令行或工作台中运行它,就会发生完全相同的事情

他还能够针对数据库中的任何其他表或视图(包括第一个视图所依赖的视图)成功地发出SELECT COUNT*查询。这只是一个特殊的视图,他可以选择*,但不能选择计数*

还有其他人经历过类似的事情吗

服务器版本:5.5.29 MySQL社区服务器GPL

编辑:以下是两个视图创建脚本,根据这些脚本,分解到仍然存在问题的相关部分

但对于我的同事来说,第一个查询返回的结果很好,而第二个查询返回的是无效表/列/权限错误


无论如何,我们可能会放弃它,但我讨厌不知道为什么有些东西不起作用。

快速搜索会得到以下结果:

SELECT *, COUNT(*) as `totalcount` FROM ranked_products LIMIT 20 OFFSET 0;
当视图中的结果集中存在NULL时发生

而当视图中的表具有相同的列名时会发生

另一方面,这表明您可能会遇到的变体,一个可行的解决方案是运行FLUSH表


可以在此处找到另一种尝试的解决方案:

您可以发布您对someview的定义吗?@AndyRefuerzo:已更新视图定义。为清楚起见,评级有产品ID和整数评级1-5,产品有ID、SKU和名称。这并不能解决无法在其他机器上运行计数查询的神秘问题。谢谢,我将在早上试一试。我确定结果集中没有空值,也没有重复的名称。该视图是新创建的,因此值得怀疑,需要刷新。我猜这是你提到的最后一个,但还没有测试过。我说猜猜,因为我的同事从第二个视图中删除了ORDERBY子句,现在它可以工作了。我猜自从他删除并重新定义了视图之后,它修复了特权,尽管我不确定为什么在他之前删除特权并从DDL创建特权时,这些特权不起作用。在任何情况下,它似乎是固定的,所以感谢链接。
SELECT * FROM ranked_products LIMIT 20 OFFSET 0;
SELECT COUNT(*) FROM ranked_products;
SELECT *, COUNT(*) as `totalcount` FROM ranked_products LIMIT 20 OFFSET 0;