我们可以使用 mysql 过程找到表中不存在的记录吗?



我正在使用MySql过程更新值,但在此之前我会检查记录是否存在。条件是,如果记录存在,那么只更新细节,它更新得很好。

现在我的问题是如何找到表中不存在的记录并返回所有值(不存在或不满足IF EXISTS条件(下面我将分享我的MySql过程。

CREATE DEFINER=`root`@`%` PROCEDURE `sp_ABC`(
IN `_startdate` DATE,
IN `_enddate` DATE,
IN `_invc` VARCHAR(100),
IN `_amt` VARCHAR(100),
IN `_stones` VARCHAR(100),
IN `_tracking` VARCHAR(100)
)
BEGIN
IF EXISTS (SELECT invc, value, ttl_stones FROM tbl_quality WHERE invc = '_invc' AND value = 
'_amt' AND ttl_stones = '_stones' AND DATE(date) BETWEEN '_startdate' AND '_enddate')
THEN
UPDATE quality_memo SET trackid = '_tracking'
WHERE invc = '_invc' AND value = '_amt' AND ttl_stones = '_stones' AND 
DATE(date) BETWEEN '_startdate' AND '_enddate';
ELSE   

-- HERE I WANT TO FIND OR RETURN **invc, value, ttl_stones** WHICH ROW DIDN'T GOT UPDATED 
-- or NOT FOUND or IF EXISTS CONDITION NOT GOT SATISFIED

END IF;

END

此外,我正在分享我的PHP代码,其中我使用ARRAY和FOR-EACH LOOP在PROCEDURE中传递值。

<?php
error_reporting(E_ERROR | E_PARSE);
include "config.php";
$s = '';
$trackingmyarray = $_POST['trackingmyarray'];
$tracking = json_decode($trackingmyarray, true);
if (is_array($tracking)) {
foreach ($tracking as $item) {
$s .= "CALL `sp_ABC`('".$item['startdate']."', '" . $item['enddate'] . "', 
'".$item['invc1']."', '".$item['amt']."', 
'".$item['stones']."', '".$item['tracking']."');";
}
}
$res = query($s);

if (strlen($res) > 0) {
echo $res;
} else {
echo 'Records added successfully...';
}
?>

我希望我把我的担忧说清楚。同样简单地说,如果值不满足if EXISTS条件,则将其打印为输出

任何帮助都将不胜感激,并提前表示感谢。

更新前不需要检查行的存在。只需运行更新并将受影响的行数返回给PHP即可。如果返回值为零,那么您知道传递的参数没有匹配的行。

此外,如果使用反引号来转义变量,请确保使用反引号而不是单引号。

CREATE PROCEDURE sp_ABC(
_startdate DATE,
_enddate DATE,
_invc VARCHAR(100),
_amt VARCHAR(100),
_stones VARCHAR(100),
_tracking VARCHAR(100)
)
BEGIN
UPDATE quality_memo 
SET trackid = _tracking
WHERE invc = _invc AND value = _amt AND ttl_stones = _stones AND DATE(date) BETWEEN _startdate AND _enddate;
SELECT ROW_COUNT();
END

最新更新