我需要调用第一个过程(CrushProps),然后通过从第一个过程中的行中调用第二个过程(CrushOutcomes)并使用值(PropId)来循环遍历每一行(并返回新行中的所有行)过程)。
我看过这个问题,但不能让它适合我: calling nested stored procedure from php
这是两个存储过程:
DROP PROCEDURE IF EXISTS CrushProps $$
create procedure CrushProps(IN crID int)
begin
select props.PropText, props.Prop_Id
from props inner join crush_props on props.Prop_Id = crush_props.PropId
where crush_props.CrushId = crID;
end $$
DROP PROCEDURE IF EXISTS CrushOutcomes $$
create procedure CrushOutcomes(IN prID int)
begin
select prop_outcomes.OutcomeText, prop_outcomes.OutcomePoints
from prop_outcomes inner join crush_props ON prop_outcomes.PropId = crush_props.PropId
WHERE prop_outcomes.PropId = prID;
end $$
成为PHP和MySQL的新手我尝试了许多不同的变化而没有任何运气。下面的代码按顺序运行两个过程,并从第一行返回所有行,但从第二行返回只有一行(并且在完整结果之后 - 而不是在每行之后)。
我无法弄清楚如何让它循环通过第一个程序的每一行。
$result = mysqli_query($con,"CALL CrushProps('$crushid')") or die("Query fail: " . mysqli_error());
if($result->num_rows > 0)
{
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC))
{
$prptxt = $row[PropText];
$prpid = $row[Prop_Id];
echo $prptxt . "<br/>";
}
$result->close();
$con->next_result();
}
$result2 = mysqli_query($con,"CALL CrushOutcomes('$prpid')") or die("Query fail: " . mysqli_error());
if($result2->num_rows > 0)
{
while($row2 = mysqli_fetch_array($result2, MYSQLI_ASSOC))
{
$outtxt = $row2[OutcomeText];
$outpts = $row[OutcomePoints];
echo $outtxt . "<br/>";
}
}