PDO: db etiketleri varlığını kontrol edin ve sonra eklemek

2 Cevap php

tags veritabanında mevcut I mysql için PDO bağlantısı ile çalışıyorum ve ben kontrol etmek için kullanabileceğiniz bir sorgu üzerinde bazı görüş var istiyorum ve değil durumda eklemek için.

// the tags are allready processed in $tags array 

$check_stmt = $connection->prepare ("SELECT * FROM tags WHERE tag_name = :tag_name");
$save_stmt = $connection->prepare ("INSERT INTO tags (tag_name) VALUES (:tag_name)");

foreach ($tags as $current_tag) {
    $check_stmt->bindParam (':tag_name', $current_tag, PDO::PARAM_STR, 32);
    $save_stmt->bindParam (':tag_name', $current_tag, PDO::PARAM_STR, 32);
    $check_stmt->execute ($current_tag);
    if ($check_stmt->rowCount() == 0) $save_stmt->execute ($current_tag);
}

Ben emin değilim böylece sorgu iyi tahmin ise ben veritabanları ile yetenekli değilim

2 Cevap

Ben optimize etmek için, kendi seçim biraz sorgulamak ayarlamak istiyorum:

SELECT 1 AS found FROM tags WHERE tag_name = :tag_name LIMIT 1

* SEÇME gerekli olandan app db den çok daha fazla veri (eşleşen kayıtları tüm alanlar) iletir. Sadece ihtiyacınız alanları seçerek çok daha verimli olduğunu, ve sadece varlığı için kontrol ediyoruz gibi bu durumda görünüyor, bu nedenle bu nedenle SELECT 1, any kayıt verilerini gerekmez.

LİMİT 1 yerine all eşleşen olanlar, bir kayıtla sorgu sonuçları sınırlar. Daha hızlı sorgu yürütme ve yine daha az veri transferi.

Bazı kirli MySQL özgü seçenekler basitçe replace into kullanarak (yapmak) veya INSERT ile birlikte anahtar GÖRMEZDEN (önerilen) içerir. INSERT sözdizimi ayrı SELECT yürütme biraz daha hızlı olacaktır GÖRMEZDEN.