【问题标题】:MySQL Stored Procedure - parsing using PHPMySQL 存储过程 - 使用 PHP 解析
【发布时间】:2012-11-19 15:03:59
【问题描述】:

我有一个使用 MySQL 的存储过程,它会输出两个表。例如:

DELIMITER //
CREATE PROCEDURE MyStoredProcedure(IN input VARCHAR(4))
SELECT * FROM BLAH;
SELECT * FROM MAH;
END //

我如何在 PHP 中处理这个问题?通常,我只处理一张桌子,所以它会是这样的:

$INPUT = mysql_real_escape_string($_POST['input']);
$sql = "CALL MyStoredProcedure('{$INPUT}')";
$res = $db->query($sql);
foreach ($res as $row) { 
    echo "<td>{$row->Column1}</td>";
}

但是现在有两张桌子。那么如何通过 PHP 获取这两个表呢?

【问题讨论】:

标签: php html mysql


【解决方案1】:

我可以用这个方法得到两个表:

存储过程

DELIMITER $$
DROP PROCEDURE IF EXISTS `get_procedure`$$

    CREATE PROCEDURE `get_procedure`()
    BEGIN
    SELECT group_concat('<tr><td>',`blah_id`,'</td><td>',`blah_title`,'</td><tr>')  as tbl1 ,
 group_concat('<tr><td>',`mah_id`,'</td><td>',`mah_title`,'</td><td>',`mah_info`,'</td><tr>')  as tbl2
    FROM `blah`,`mah`;
    END $$

    DELIMITER ;

例如表格:

CREATE TABLE IF NOT EXISTS `blah` (
  `blah_id` int(11) NOT NULL AUTO_INCREMENT,
  `blah_title` varchar(300) NOT NULL,
  PRIMARY KEY (`blah_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

CREATE TABLE IF NOT EXISTS `mah` (
  `mah_id` int(11) NOT NULL AUTO_INCREMENT,
  `mah_title` varchar(300) NOT NULL,
  `mah_info` varchar(32) NOT NULL,
  PRIMARY KEY (`mah_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

在选择 concat 之后,您可以使用 , rows 展开。

希望对你有帮助

【讨论】:

    【解决方案2】:

    如果你想要两个查询的结果,你不能这样。您正在做的是一个查询,然后是另一个查询。该过程的结果是第二个查询。如果您只需要一个结果中的两个,则必须将 SELECT 组合成一个,可能使用联合,这样您的过程中将只有一个查询结果,所有寄存器都来自两个表。试试这样的:

    CREATE PROCEDURE MyStoredProcedure(IN input VARCHAR(4)) 从 BLAH 中选择 * 联盟 从 MAH 中选择 *; 结束

    使用 union 语句有一些限制,如以下链接所示:http://dev.mysql.com/doc/refman/4.1/en/union.html

    如果两个表都具有相同数据类型的列,则可以使用此选项。如果没有,您可以执行以下操作:

    CREATE PROCEDURE MyStoredProcedure(IN input VARCHAR(4)) 选择 b.column1, b.column2, ... , m.column1, m.column2, ... 从 BLAH 作为 b,MAH 作为 m; 结束

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2016-06-01
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 2015-11-09
      相关资源
      最近更新 更多