0

我有以下查询,用于从 mysql 数据库中提取数据。

SELECT ProductCode, ProductName, ProductCategory
   FROM Product
      WHERE <<Criteria goes here>>

查询返回的数据由 .NET 应用程序使用,我得到一百万行,我将通过 DataReader 逐一查看这些数据。

现在我必须显示进度条,告诉用户已收到多少百分比的行。这意味着我需要一个总数

一位朋友建议我添加 COUNT(*) 作为额外的列,其中将包含重复的数字,但我们不必进行两次往返,一次获取计数,另一次获取行。

SELECT ProductCode, ProductName, ProductCategory, COUNT(*)
   FROM Product
      WHERE <<Criteria goes here>>

当我添加 COUNT(*) 时,mysql 只返回一条记录。第二,我不确定这是否是个好主意。

请分享您对此的了解 谢谢

4

3 回答 3

2

您可以使用 SQL_CALC_FOUND_ROWS http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows

例如 SELECT SQL_CALC_FOUND_ROWS, ProductCode, ProductName, ProductCategory FROM Product WHERE <>

然后运行此查询以获取行数而不过滤'select FOUND_ROWS();'

于 2013-09-18T19:19:48.670 回答
1

DBMS 可能在完全创建答案集之前开始向客户端返回行,那么获得 100% 正确值的唯一方法是使用

SELECT COUNT(*) FROM (your query) x;

在运行查询或使用 count 作为窗口函数之前,但 MySQL 不支持:

SELECT ProductCode, ProductName, ProductCategory, COUNT(*) OVER () 
   FROM Product
      WHERE <<Criteria goes here>>
于 2013-09-18T19:18:47.773 回答
0

假设您在 a 中加载检索到的记录DataTable,只需检查DataTable.Rows.Count()属性以查看您有多少。

于 2013-09-18T19:37:47.683 回答