MySQL tabloda dizi ürün varlığını kontrol etmek için en hızlı yol

4 Cevap php

User writes a series of tags (, separated) and posts the form.
I build an array containing the tags and delete dupes with array_unique() php function.

Ben yapmayı düşünüyorum:

  • foreach ($ öğe $ gibi yeni_dizi) ile dizi üzerinden gitmek {...}
  • etiketleri mySQL tablodaki varlığı için her $ öğeyi kontrol
  • öğe mevcut değilse, etiketler tabloya eklemek

Bunu yapmak için bir FASTER veya MORE OPTIMUM yolu var mı?

4 Cevap

Ben insanların bu yöntem üzerinde yorum yapabilirsiniz umuyorum. Sezgi şeyleri gitmek onun muhtemelen en iyi yolu bana söyler, ama siz ne düşünüyorsunuz?

Bunun yerine çiftleri bulmak için DB için ekstra bir çağrı yapma etiketleri kez takılamıyor, böylece sadece DB benzersiz bir kısıtlama ekleyin. Yeni etiketler eklediğinizde INSERT IGNORE... kullanın. Aynı zamanda yeni ürün eklerken Bu yöntem Taklitten kaynaklanan hataları göz ardı eder.

Sen implode( ',' $array ) daha sonra db mevcut satırların olup olmadığını kontrol etmek IN SQL yapısı kullanmak arayabilirsiniz.

Örnek:

<?php
   $arr = ...
   $sql = 'SELECT COUNT(*) FROM table WHERE field IN ( ' . implode( ',', $arr ) . ' );';
   $result = $db->query( $sql );
?>

Sen büyük bir sorgu oluşturmak yerine birçok küçük sorguları tek atışla, bunu yapabilirdi:

SELECT DISTINCT tag
  FROM my_tags
 WHERE tag in ( INPUT_TAGS )

Sadece bir virgülle ayrılmış bir liste olarak INPUT_TAGS kurmak, ve düzgün bir SQL enjeksiyon saldırıları önlemek için her öğe kaçmak emin olun.