【发布时间】:2011-01-14 19:30:20
【问题描述】:
如何像@@ROWCOUNT 在 mssql 中那样在 MySQL 中获取行计数值?
【问题讨论】:
标签: sql mysql stored-procedures
如何像@@ROWCOUNT 在 mssql 中那样在 MySQL 中获取行计数值?
【问题讨论】:
标签: sql mysql stored-procedures
计算 where 子句中子查询的行数。然后测试总行数是否大于零。
选择客户编号, 顾客姓名, 信用额度 来自客户 其中 (SELECT count(*) as tot 来自客户) > 0;
【讨论】:
还有一种方法:
CREATE TEMPORARY TABLE `results` AS ( *** Your query without LIMIT *** );
获取行数
SELECT COUNT(*) FROM `results`;
获取您的子集
SELECT * FROM `results` LIMIT 5,10;
临时表只存在于当前会话中。之后我仍然会清理
DROP TEMPORARY TABLE `results`;
【讨论】:
SELECT COUNT(*) FROM table 速度特别快,并且消除了重复查询复杂性的成本。如果您可以持久保存临时表,直到它不再以某种方式不再使用,它还可以为您节省后续分页的成本
对于 SELECT,您可以使用 FOUND_ROWS 构造 (documented here):
SELECT SQL_CALC_FOUND_ROWS something FROM your_table WHERE whatever;
SELECT FOUND_ROWS( ) ;
这将返回最后一个SELECT 查询中的行数(或者如果第一个查询有LIMIT 子句,它会返回没有LIMIT 的行数)。
对于UPDATE/DELETE/INSERT,它是ROW_COUNT 构造
INSERT INTO your_table VALUES (1,2,3);
SELECT ROW_COUNT();
这将返回受影响的行数。
【讨论】:
最简单的方法是使用变量:
mysql> SELECT @rowcount:=COUNT(*) FROM my_table;
mysql> SELECT @rowcount;
或者您可以在将 SQL_CALC_FOUND_ROWS 放入 SELECT 语句后使用 FOUND_ROWS() 构造。
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM my_table;
mysql> SELECT FOUND_ROWS();
【讨论】:
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
-> WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();
阅读更多关于这个here
【讨论】: