phpMyAdmin挂起有多个SELECTS的proc

时间:2012-12-29 05:05:20

标签: mysql stored-procedures phpmyadmin freeze multiple-resultsets

当我在MySQL中CALL这个proc时,它只显示LOADING...,甚至冻结我的服务器:

delimiter $$
CREATE PROCEDURE MyProc(IN index1 INT, IN count1 INT, IN index2 INT, IN count2 INT)
BEGIN
    SELECT id FROM view1 WHERE column1 IS NULL OR column1 = 1 ORDER BY dateColumn DESC LIMIT index1, count1;
    SELECT id FROM view1 WHERE column2 = 0 ORDER BY column3 DESC LIMIT index2, count2;
END$$
delimiter ;

如果我只有SELECT个中的一个,那就可以了。

任何人都知道我错过了什么/做错了什么?

非常感谢提前!

详情

我正在为PHP创建一个proc,这样我就不必与数据库建立这么多连接。每个SELECT都需要是其自己的结果集,其中包含列信息以便于PHP。

我需要稍微提高速度,因为我的网站严重依赖于动态分页。

2 个答案:

答案 0 :(得分:1)

你在做什么是非常明智的。这看起来像是phpmyadmin中可能最近已修复的缺陷,其中返回多个结果集的存储过程未得到正确处理。

http://sourceforge.net/tracker/?func=detail&atid=377408&aid=3474853&group_id=23067

答案 1 :(得分:0)

试试这个:

DELIMITER $$
CREATE PROCEDURE MyProc(IN index1 INT, IN count1 INT, IN index2 INT, IN count2 INT)
BEGIN
    SET @s = CONCAT('SELECT id FROM view1 WHERE column1 IS NULL OR column1 = 1 ORDER BY dateColumn DESC LIMIT ', index1, ', ', count1);
    SET @s1 = CONCAT('SELECT id FROM view1 WHERE column2 = 0 ORDER BY column3 DESC LIMIT ', index2, ', ', count2);
    PREPARE stmt FROM @s;
    PREPARE stmt1 FROM @s1;
    EXECUTE stmt;
    EXECUTE stmt1;
    DEALLOCATE PREPARE stmt;
    DEALLOCATE PREPARE stmt1;
END$$
DELIMITER ;