不需要迭代就可以在游标中获取MySQL记录数?

10

我正在尝试编写以下逻辑的MySQL存储过程:

select id, fullname from users where fullname like concat(lastname, ' ', firstname, ' (' , middlename, '%');

如果上面的查询返回0条记录,则

    select id, fullname from users where fullname like concat(lastname, ' ', firstname, '%');

.... few more queries depending upon result,

我正在尝试编写MySQL存储过程,在其中使用MySQL游标。

DECLARE user_cnt CURSOR FOR select id, fullname from users where fullname like concat(lastname, ' ', firstname, ' (' , middlename, '%'); 

现在我想要检查user_cursor中记录的数量,以便我可以检查条件“如果查询返回0条记录,则”

如何在不迭代MySQL游标的情况下查找记录的数量?

2个回答

17

在光标前进行计数:

select count(*)
into @user_cnt
from users
where fullname like concat (
    lastname,
    ' ',
    firstname,
    ' (',
    middlename,
    '%'
    );

编辑: 如果您想在打开光标后执行此操作,请尝试执行以下操作:

OPEN your_cursor;
select FOUND_ROWS() into user_cnt ;

我想知道是否有一种方法可以在不迭代的情况下计算现有游标中记录的数量? - vishal
@user1191081。在打开游标后尝试使用 SELECT FOUND_ROWS() - Filipe Silva
最好建议一种不需要使用游标的解决方案,因为性能非常糟糕。 - Drew
MySql 8中已弃用FOUND_ROWS(),建议使用COUNT(*)代替。 - Daniel Pop

0
在您的游标选择中包含SQL_CALC_FOUND_ROWS。然后在提取时使用FOUND_ROWS()。它会给出记录的数量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接