From e00dd08c23f565f5db291d9e7e9587a889eac2db Mon Sep 17 00:00:00 2001 From: Joshua Ramon Enslin Date: Sat, 11 Dec 2021 01:29:48 +0100 Subject: [PATCH] Use ON DUPLICATE KEY update instead of checking value existence with a separate query --- src/NodaWikidataFetcher.php | 43 ++++++++----------------------------- 1 file changed, 9 insertions(+), 34 deletions(-) diff --git a/src/NodaWikidataFetcher.php b/src/NodaWikidataFetcher.php index 5e498bf..2f55689 100644 --- a/src/NodaWikidataFetcher.php +++ b/src/NodaWikidataFetcher.php @@ -964,40 +964,15 @@ final class NodaWikidataFetcher { // Write link to wikipedia to relevant noda DB table - $wikiAlreadyResult = $this->_mysqli_noda->query_by_stmt("SELECT `noda_orte`.`noda_id` - FROM `noda_orte` - WHERE `noda_orte`.`ort_id` = ? - AND `noda_orte`.`noda_source` = 'Wikipedia'", "i", $placeID); - - switch ($wikiAlreadyResult->num_rows) { - case 0: - - $insertWikiStmt = $this->_mysqli_noda->do_prepare("INSERT INTO `noda_orte` - (`ort_id`, `noda_source`, `noda_nrinsource`, `noda_link`, `noda_erfasst_am`, `noda_erfasst_von`) - VALUES - (?, 'Wikipedia', '', ?, NOW(), ?)"); - $insertWikiStmt->bind_param("iss", $placeID, $wikilink[$lang], $erfasst_von); - $insertWikiStmt->execute(); - $insertWikiStmt->close(); - unset($insertWikiStmt); - - break; - case 1: - - if ($wikiAlreadyData = $wikiAlreadyResult->fetch_assoc()) { - $wikischon_id = $wikiAlreadyData['noda_id']; - - $updateStmt = $this->_mysqli_noda->do_prepare("UPDATE `noda_orte` SET `noda_link` = ? WHERE `noda_id` = ?"); - $updateStmt->bind_param("si", $wikilink[$lang], $wikischon_id); - $updateStmt->execute(); - $updateStmt->close(); - unset($updateStmt); - } - break; - } - - $wikiAlreadyResult->close(); - unset($wikiAlreadyResult); + $insertWikiStmt = $this->_mysqli_noda->do_prepare("INSERT INTO `noda_orte` + (`ort_id`, `noda_source`, `noda_nrinsource`, `noda_link`, `noda_erfasst_am`, `noda_erfasst_von`) + VALUES + (?, 'Wikipedia', '', ?, NOW(), ?) + ON DUPLICATE KEY UPDATE `noda_link` = ?"); + $insertWikiStmt->bind_param("isss", $placeID, $wikilink[$lang], $erfasst_von, $wikilink[$lang]); + $insertWikiStmt->execute(); + $insertWikiStmt->close(); + unset($insertWikiStmt); return true;