テーブルに投稿したDBからのデータがあります。テーブルのすべての行 (while ループのすべてのループ) に対して、ストアド プロシージャを呼び出し<td>
てテーブルの最後のデータを計算する必要があります。
ここにいくつかのコード:
$s = $lk->query("SELECT *
FROM A_USERS
JOIN A_DATA
WHERE A_DATA.id_user = A_USERS.id
AND A_USERS.usr_att = 1
AND A_DATA.act_data = 1
AND A_DATA.a_att = 1
AND A_DATA.qty IS NOT NULL
ORDER BY ID ASC");
while ($dato = $s->fetch_object()) {
print '<tr>';
print '<td>';
print $dato->id;
print '</td>';
//others cells
$GetP = $lk->query("CALL GetPr($dato->qty, '$dato->prod')");
if(mysqli_num_rows($GetP) === 1){
while($p_db = mysqli_fetch_array($GetP)){
$p = $p_db['p'];
}
$format = number_format(round($p, 1), 2, ',', '\'');
//some other stuff here...
}else{
print '<td>';
print 'ERROR';
print '</td>';
}
print '</tr>';
}
問題は、最初のループのみがwhile
を返すプロシージャを呼び出すこと1 row
です。それ以外の場合は、ストアド プロシージャが返されなかったことを意味しERROR
ます。<td>
1 row
なんで?
編集
ストアド プロシージャ:
CREATE DEFINER=`...` PROCEDURE `GetPr`(IN `cli_qty` INT, IN `cli_prod` VARCHAR(10) CHARSET ascii)
BEGIN
SET @cli_qty = cli_qty;
SET @q = (SELECT qty FROM MRG_H ORDER BY ABS(@cli_qty - qty) ASC LIMIT 1);
SET @cli_prod = cli_prod;
IF @cli_prod = 'OECO' THEN SET @marg = (SELECT (m+v) FROM MRG_H JOIN DT WHERE m <> '' AND q = @q AND par = 'MarOECO');
ELSE SET @marg = (SELECT m FROM MRG_H WHERE m <> '' AND q = @q);
END IF;
SELECT (Med+@marg)*((Val+100)/100) AS P, D_aaaammgg AS Date
FROM PL
JOIN TVA
WHERE I_D = 0
AND Med <> ''
AND Date_f = ''
ORDER BY Iden DESC
LIMIT 1;
END
MYSQL エラー:
Error: 2014-Commands out of sync; you can't run this command now