DROPPROCEDUREIFEXISTS`calConfNumberbyUser`;
DELIMITER //
CREATEPROCEDURE calConfNumberbyUser(IN daynumber INT, IN startRow INT, IN pageSize INT)
--外层循环从userlist表里面取到所有的工程师列表的游标
BEGINDECLARE chatername VARCHAR(255) default'';
DECLARE done int default false;
DECLARE cur CURSOR for (SELECT username FROM`userlist`ORDERBY id LIMIT startRow, pageSize);
DECLARE CONTINUE HANDLERFORNOTFOUNDSET done=null;
OPEN cur;
FETCH cur into chatername;
WHILE(done is not null) DO
--内层循环计算每一个工程师的在某一个时间段的会话数量
BEGINDECLARE usersgroup VARCHAR(255) default'';
DECLARE confNumber int(8) default 0;
DECLARE done int default false;
DECLARE cur CURSOR for (SELECT GROUP_CONCAT(fromname,";", toname) as name FROM`conf`where messagetime < NOW() and messagetime >= date_sub(NOW(), INTERVAL daynumber DAY) groupBY confid );
DECLARE CONTINUE HANDLERFORNOTFOUNDSET done=null;
OPEN cur;
fetch cur into usersgroup;
while(done is not null) doset usersgroup = REPLACE(usersgroup, ';', ',');
if FIND_IN_SET(chatername, usersgroup) THEN
set confNumber = confNumber + 1;endif;
fetch cur into usersgroup;
end while;
close cur;
select chatername, confNumber;END;
FETCH cur into chatername;
END WHILE;
CLOSE cur;
END;
//
DELIMITER ;
DROPPROCEDUREIFEXISTS`calConfNumberbyUser`;
DELIMITER //
CREATEPROCEDURE calConfNumberbyUser(IN daynumber INT, IN startRow INT, IN pageSize INT)
BEGINDECLARE chatername VARCHAR(255) default'';
DECLARE done int default false;
DECLARE cur CURSOR for (SELECT username FROM`userlist`ORDERBY id LIMIT startRow, pageSize);
DECLARE CONTINUE HANDLERFORNOTFOUNDSET done=null;
OPEN cur;
FETCH cur into chatername;
WHILE(done is not null) DOBEGINDECLARE usersgroup VARCHAR(255) default'';
DECLARE confNumber int(8) default 0;
DECLARE done int default false;
DECLARE cur CURSOR for (SELECT GROUP_CONCAT(fromname,";", toname) as name FROM`conf`where messagetime < NOW() and messagetime >= date_sub(NOW(), INTERVAL daynumber DAY) groupBY confid );
DECLARE CONTINUE HANDLERFORNOTFOUNDSET done=null;
OPEN cur;
fetch cur into usersgroup;
while(done is not null) doset usersgroup = REPLACE(usersgroup, ';', ',');
if FIND_IN_SET(chatername, usersgroup) THEN
set confNumber = confNumber + 1;endif;
fetch cur into usersgroup;
end while;
close cur;
select chatername, confNumber;END;
FETCH cur into chatername;
END WHILE;
CLOSE cur;
END;
//
DELIMITER ;