我在php中有一个代码,它插入到具有给定值的表中,但如果要插入的日期存在,我必须检查要插入的表。如果它确实存在,则不要插入,但如果不存在,则插入。
这是我对PHP 的代码/查询
$querysms = "INSERT INTO tblKMRUN2 (Long,Lat,Account,TrxDateTime,PhilTime,DeviceStatus,Engine,Speed2,PlateNo,ProcStatus)
values ($longfin,$latfin,$account,'$findate','$findate','$finstatus','$lastengine',$speed,'$pltefin','0')
where not exist (SELECT * FROM tblKMRUN2 WHERE Long = $longfin and
Lat = $latfin and
Account = $account and
TrxDateTime = $findate and
PhilTime = $findate and
DeviceStatus= $finstatus and
Engine = $lastengine and
Speed2 = $speed and
PlateNo = $pltefin)";
这是我的数据查询
INSERT INTO tblKMRUN2 (Long,Lat,Account,TrxDateTime,PhilTime,DeviceStatus,Engine,Speed2,PlateNo,ProcStatus)
values (121.0002,14.3043,353816053658193,'2015-02-11 13:52:19.000','2015-02-11 13:52:19.000','OK','ENGINE OFF',0.10,'AT5000','0')
select * from tblKMRUN2
where not exists (SELECT * FROM tblKMRUN2 WHERE Long = 121.0002 and Lat = 14.3043 and Account = 353816053658193 and TrxDateTime = '2015-02-11 13:52:19.000' and PhilTime = '2015-02-11 13:52:19.000' and DeviceStatus= 'OK' and Engine = 'ENGINE OFF' and Speed2 = 0.10 and PlateNo = 'AT5000')
您的代码没有正确检查特定的行,而是检查整个表,因此它仍然会插入。要解决此问题,您可以使用一个基本函数来检查有多少行符合您的描述,然后决定插入。
试试这个:
where not exists (SELECT * ...
成为
where 1 > (SELECT count(*) ...
希望有帮助:)
插入前检查值。。。
IF EXISTS (
SELECT 1 FROM tblKMRUN2 WHERE
Long = $longfin and
Lat = $latfin and
Account = $account and
TrxDateTime = $findate and
PhilTime = $findate and
DeviceStatus= $finstatus and
Engine = $lastengine and
Speed2 = $speed and
PlateNo = $pltefin
)
)
begin
INSERT INTO tblKMRUN2
(Long,Lat,Account,TrxDateTime,PhilTime,DeviceStatus,Engine,Speed2,PlateNo,ProcStatus)
values ($longfin,$latfin,$account,'$findate','$findate','$finstatus','$lastengine',$speed,'$pltefin','0')
end
else
begin
select 'values exists'
end