当我在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。
我需要稍微提高速度,因为我的网站严重依赖于动态分页。
答案 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 ;