PHP Etiket Bulutu Sistemi

2 Cevap php

I this tavsiyesi dayalı bir etiket bulutu sistemi uygulayan duyuyorum. (Ancak, yabancı anahtarları kullanarak değilim)

Ben 25 etiketleri kadar izin veriyorum. Benim soru nasıl öğeleri düzenleme işleyebilir, nedir? Bu madde / düzenleme sayfa ekleyerek adres:

Title: Description: Tags: (example data) computer, book, web, design

Birisi bir öğesi ayrıntılarını düzenlerse, o zaman yeni öğeler eklemek, ilk Item2Tag tablodan tüm etiketleri silmek gerekiyor? Örneğin, birisi bu verileri değiştirildi:

Etiketler: (örnek veriler), bilgisayar, kitap, web, gazete

Ben Item2Tag tablosundan tüm etiketleri silmek, ve daha sonra bu öğeler eklemek gerekir mi? Bu verimsiz gibi görünüyor, ama ben daha etkili bir yol bulabiliriz.

Diğer sorun birisi açıklama düzenler fakat etiketleri kutusunu değiştirmek değilse, bu şekilde, hala Item2Tag tablosundan tüm öğeleri silin ve aynı öğe eklemek gerekir olduğunu.

Ben deneyimli bir PHP coder değilim, bu yüzden bu işlemek için daha iyi bir yol önerebilirsiniz? (Saf PHP / MySQL çözüm tercih edilir)

Teşekkür peşin,

2 Cevap

Bunu sadece denemek ve yeni etiketleri eklemek bağlantıları Item2Tag tabloda birincil anahtar olmalıdır - Bir item2tag bağlantı zaten varsa, bu ancak dışarı hata olacaktır. Eğer kullandığınız DBMS bağlı olarak bu işleme farklı yolları vardır. MySQL aşağıdaki sözdizimi sağlar:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

Eşdeğerdir:

UPDATE table SET c=c+1 WHERE a=1;

Kayıt zaten varsa.

Ikinci sorun için, iyi öğenin item_id değişmediyse etiketleri değiştirmek gerekmez. Item2Tag tablo bir etikete bir öğe bağlar, ancak item_id sabit kalırsa etiketler değiştirmeye gerek yoktur.

Sisteminizde zaten mevcut etiketleri biliyoruz, bu yüzden ne yapabilirim bir delta olun.

To use your own example, these are the starting tags: computer, book, web, design

And someone changes this too: computer, book, web, newspaper

// Quick & dirty example (pseudo)code
$current_tags = array('computer', 'book', 'web', 'design');
$new_tags = array('computer', 'book', 'web', 'newspaper');

foreach ($new_tags as $key => $new_tag) {
  if (!in_array($new_tag, $current_tags) {
    $tags_to_add[] = $new_tag;
  } else {
    // Delete item from $current_tags
  }
}
// Now delete the items left in $current_tags
// And then add the items in $tags_to_add