2013-10-03 4 views
3

Я пытаюсь написать процедуру MySQL для ниже логики,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 без итерации на нем?

ответ

7

ли счетчик перед курсором:

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

EDIT: Если вы хотите сделать это после открытия курсора, попробуйте сделать:

OPEN your_cursor; 
select FOUND_ROWS() into user_cnt ; 
+0

Я хотел знать, есть ли способ подсчитать количество записей в существующем курсоре без итерации? – vishal

+0

@ пользователь1191081. Попробуйте 'SELECT FOUND_ROWS()' после вашего курсора OPEN. –

+0

Лучше всего предложить решение без курсора в качестве предложения оговорки, потому что производительность ужасна. – Drew

0

Включите SQL_CALC_FOUND_ROWS в курсор select.Then на выбор используйте FOUND_ROWS(). Он дает количество записей

Смежные вопросы