3

当我CALL在 MySQL 中执行此过程时,它只会显示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 中使用。

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

4

2 回答 2

1

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

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

于 2012-12-29T06:02:22.420 回答
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 ;
于 2012-12-29T05:30:03.500 回答