Могу ли я поместить запрос SELECT в оператор IF в MySQL? - PullRequest
0 голосов
/ 13 июня 2019

Что ж, я получаю некоторые значения из основной таблицы, скажем MTB, и суммирую их в другой таблице, скажем STB, используя этот скрипт. Не существует уникального или первичного ключа, поэтому я не могу использовать здесь ситуацию с DUPLICATE KEY.

Что я хочу сделать, так это если имя узла) выбрано из MTB Уже существует в STB Тогда я просто хочу обновить его, и если имя узла из MTB не существует в STB затем я хочу вставить данные в таблицу.

Я попытался использовать регистр If, сначала выбрав строку в STB, используя имя узла, извлеченное из MTB, что, если имя узла из MTB присутствует в STB (т. Е. Запрос выбора не равен NULL ) затем мы обновляем его, мы вставляем его.

Однако это не работает. Пожалуйста, подскажите, что я сделал неправильно.


IF (SELECT * FROM `NodesInfo` WHERE `Nodename` = '".$row2['nodeName']."') IS NOT NULL 

    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  

Ответы [ 3 ]

1 голос
/ 13 июня 2019

Просто посмотрите на следующий код, он работает. Для 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')");
}
0 голосов
/ 13 июня 2019
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  
0 голосов
/ 13 июня 2019

Кажется, вы хотите обновить 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';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...