【问题标题】:phpMyAdmin hangs on proc with multiple SELECTSphpMyAdmin 挂在具有多个 SELECTS 的 proc
【发布时间】:2012-12-14 06:29:39
【问题描述】:

当我在 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 ;

如果我只有SELECTs 之一,它可以工作。

有人知道我错过了什么/做错了吗?

非常感谢!

详情

我正在为 PHP 创建一个 proc,这样我就不必与数据库建立如此多的连接。每个SELECT 都需要有自己的结果集,并带有列信息,以便在 PHP 中使用。

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

【问题讨论】:

  • 不确定它为什么会挂起,但您可能希望两个选择之间的联合以获得单个结果集
  • 你也可以试试 Set @someVar := (select .....)
  • @PeterJ 感谢收看!是的,我几乎把它从文档中撕下来了,所以我不知道是什么给出的。至于UNION,这n+1个结果集没有列名吧?
  • @SureshKamrushi 感谢您的宝贵时间!我要返回@someVar 吗? MySQL 显然不是我的强项。 ;P
  • 不确定这在 MySQL 中是如何工作的,我更多地使用 SQL/Server,它从内存中保持列名正常(如果它们相同)

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


【解决方案1】:

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

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

【讨论】:

  • 谢谢你,迈克尔。我有 3.5.1。我需要升级吗?
  • 刚刚升级到最新。还挂着。天哪,这太荒谬了。谢谢你的帮助! (和升级)
  • 作为记录,这里的第一个选择(管理员)webdesigneronline.co.uk/10-great-alternatives-to-phpmyadmin 工作。
  • 自 3.5.1 以来已经发布了一些版本,但从发行说明中很难判断该修复是否已被推送到其中任何一个。我总是使用 mysql 命令行客户端测试多结果集 SP,因为它可以完美地处理它们,所以这是我对有保证的解决方案的建议。
  • 这个bug的修复目前在phpMyAdmin的master分支中。这意味着它将在 4.0 版中可用
【解决方案2】:

试试这个:

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 ;

【讨论】:

  • 非常感谢您的尝试!出于某种原因,它在@index1 处为第一个过程提供了#1064。第二个过程需要,但它给出的结果与我原来的相同。啊!是否有一些设置我必须打开以允许 phpMyAdmin 中的多个结果集?
  • 哦!我看错了! #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@index1, @count1; SELECT id FROM view1' at line 12 LIMIT 是否在 MySQL 存储过程中禁止索引 AND 计数?
  • 我正在删除我的第一个查询,并想知道第二个查询的问题是什么
  • 我想这可能是它:dbaspot.com/mysql/…
  • 你留下的proc没有错误,但是当我CALL时,它就像我原来的一样挂起。需要找到另一个程序来测试......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-03
  • 2012-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多