Мне нужна помощь с вставкой некоторых данных в таблицу сервера sql с помощью предложения IF. У меня есть возврат API, который я вставляю в таблицу сервера sql. Однако, поскольку я буду планировать свой код каждый день, чтобы получать обновления от API, чтобы видеть, есть ли что-нибудь новое, но каждый раз, когда он выполняет код, он вставляет ту же информацию в таблицу.

Самым логичным, что я подумал, было сделать выбор в таблице, куда я вставлю данные, и создаст IF, где он сравнивает то, что находится в таблице, и мой возврат из массива. Если он такой же, ничего не делает, если другой - вставьте. Однако else не проверяется, даже если возврат IF является ложным.

Я пробовал If, if else, If (): else: endif; но я не мог.

Может кто-то помочь мне, пожалуйста?


   $resultado = json_decode(curl_exec($curl),true);
    curl_close($curl);



//! Teste SELECT:

$qyS = Conexao::getConnection()->prepare("SELECT idSkill FROM LIVEPERSON_SKILLS");
$qyS->execute();
$selectResult = $qyS->fetchAll();

foreach ($selectResult as $indSelect => $retSelect){
    $idSkillComp = $retSelect['idSkill'];


//* 6 | Abertura do laço ['skills']
    foreach ($resultado as $indice => $infoSkills){
        $idSkill = $infoSkills['id'];
        $name = $infoSkills['name'];
        $deleted = $infoSkills['deleted'];
        $dh_insert = date("Y-m-d H:i:s");

//* 7 | Inserção dados no banco:

    if($idSkill == $idSkillComp){
        echo "error";
    }else{
    $qyI = Conexao::getConnection()->prepare("INSERT INTO LIVEPERSON_SKILLS 
        (DH_INSERT,idSkill,name,deleted) 
        VALUES (:d, :i, :n, :x)");

    $qyI->bindValue(":d",$dh_insert);
    $qyI->bindValue(":i",$idSkill);
    $qyI->bindValue(":n",$name);
    $qyI->bindValue(":x",$deleted);
    $qyI->execute();
        }


    }
  }

0
g-abriel 7 Май 2021 в 00:21

1 ответ

Лучший ответ

Добрый день. Я понял, что происходило в этом случае. Во втором foreach я запросил открытие каждой строки, найденной в запросе (я считаю, что это нормальное поведение foreach). Поэтому при вставке данных я вставил дубликат, так как это было 36 идентификаторов навыков для каждой строки, найденной в выбранном элементе.

Я решил эту проблему, оставив правило внутри вставки, изменив его на вставку выбора вместо того, чтобы делать выбор, а затем сравнить с тем, что будет вставлено.

Вот как это было:

   $resultado = json_decode(curl_exec($curl),true);
    curl_close($curl);

    foreach ($resultado as $indInfoSkills => $infoSkills){
        $idSkillPrepare = array($infoSkills['id']);
        $idSkill =  implode(",",$idSkillPrepare);
        $name = $infoSkills['name'];
        $deleted = $infoSkills['deleted'];
        $dh_insert = date("Y-m-d H:i:s");

    $qyI = Conexao::getConnection()->prepare(
        "INSERT INTO LIVEPERSON_SKILLS (DH_INSERT,idSkill,name,deleted) 
            SELECT :dhInsert, 
                   :idSkill, 
                   :name, 
                   :deleted 
            WHERE NOT EXISTS (SELECT idSkill 
                              FROM LIVEPERSON_SKILLS 
                              WHERE idSkill = '$idSkill')");
        
    $qyI->bindValue(":dhInsert",$dh_insert);
    $qyI->bindValue(":idSkill",$idSkill);
    $qyI->bindValue(":name",$name);
    $qyI->bindValue(":deleted",$deleted);
    $qyI->execute();

    }

Большое спасибо всем, кто пытался мне помочь.

0
g-abriel 11 Май 2021 в 21:36