我可以在MySQL的IF语句中放入SELECT查询吗?

时间:2019-06-13 05:55:27

标签: php mysql sql mariadb

好吧,我正在使用此脚本从主表中说MTB得到一些值,并在另一个表中说STB中总结了它们。没有唯一键或主键,因此在这里我不能使用ON DUPLICATE KEY的情况。

我想做的是,如果从MTB获取的节点名称已经存在于STB中,那么我只想更新它,并且如果来自MTB的节点名称确实存在STB中不存在,那么我想将数据插入表中。

我尝试使用If情况,首先使用从STB获取的节点名在MTB中选择行,如果{{1}中存在来自MTB的节点名}(即选择查询IS NOT NULL),然后我们对其进行更新,否则我们将其插入。

但是,这无法正常工作。请暗示我做错了。

STB

3 个答案:

答案 0 :(得分:1)

只需看下面的代码,它就可以工作。 对于MYSQL:

$qry = mysqli_query(<set your db connection variable>, "SELECT * FROM `NodesInfo` WHERE nodeName` = '".$row2['nodeName']."' ");
$res = mysqli_num_rows($qry);

if($res > 0)
{
    $update_qry = mysqli_query(<set your db connection variable>, "UPDATE `NodesInfo` SET `Time Stamp`= '".$row2['timeStamp']."',`Status`= '$status' WHERE nodeName` = '".$row2['nodeName']."'");
}
else
{
    $insert_qry = mysqli_query(<set your db connection variable>, "INSERT INTO `NodesInfo`(`Nodename`, `Category`, `Time Stamp`, `Type`, `Status`) VALUES ('".$row2['nodeName']."','NodeMCUMQTTData','".$row2['timeStamp']."','$type','$status')");
}

答案 1 :(得分:0)

如果您已经nodeName已经退出,则似乎要对其进行更新,否则将插入新条目。

要实现此目的,您可以将nodeName字段设为唯一。

ALTER TABLE `NodesInfo` ADD UNIQUE INDEX `idx_nodeName` (`nodeName`);

现在您可以尝试ON DUPLICATE KEY UPDATE

INSERT INTO `NodesInfo`(`Nodename`, `Category`, `Time Stamp`, `Type`, `Status`) VALUES ('".$row2['nodeName']."',
'NodeMCUMQTTData',
'".$row2['timeStamp']."',
'$type','$status'
)
ON DUPLICATE KEY UPDATE
`Time Stamp`= '".$row2['timeStamp']."',
`Status`= '$status';

答案 2 :(得分:0)

IF exists(SELECT * FROM `NodesInfo` WHERE nodeName` = '".$row2['nodeName']."') 

  THEN
   UPDATE `NodesInfo` SET `Time Stamp`= '".$row2['timeStamp']."',`Status`= '$status' WHERE nodeName` = '".$row2['nodeName']."'

ELSE 

    INSERT INTO `NodesInfo`(`Nodename`, `Category`, `Time Stamp`, `Type`, `Status`) VALUES ('".$row2['nodeName']."','NodeMCUMQTTData','".$row2['timeStamp']."','$type','$status') 

END IF  
相关问题