SQL metin alanında kelime ayıklanıyor

3 Cevap php

Şu anda küçük bir site için küçük bir CMS inşa ediyorum. Şimdi text_content alanında tüm kelimeleri ayıklamak ve daha sonra analiz için benim word tabloda bunları saklamak istiyorum.

page( id int, 
      title varchar(45),
      # ... a bunch of meta fields ...  
      html_content text,
      text_content text);

word( page_id int,        # Foreign key
      word varchar(100)); # I presume there are no words longer than 100 chars

Şu anda metnin büyük parçalar için çok yavaş (anlaşılır) çalışan aşağıdaki kodu kullanıyorum.

// Sidenote: $_POST is sanitized above scope of this code.
$_POST['text_content'] = str_replace("\t", "", 
         htmlspecialchars_decode(strip_tags($_POST['html_content'])));

// text is in swedish, so we add support for swedish vowels
$words = str_word_count($_POST['text_content'], 1, "åäöÅÄÖ");

// Delete all previous records of words
$this->db->delete("word", array('page_id' => $_POST['id']));

// Add current ones
foreach($words as $word)
{
    if (trim($word) == "")
    	continue;

    $this->db->query("INSERT INTO word(page_id, word) VALUES(?, ?)", 
                      array($_POST['id'], strtolower(trim($word))));
}

Şimdi, ben bu çözüm ile mutlu değilim. Ben php sürüm olarak hemen hemen aynı şeyi yapardı veritabanında bir tetikleyici oluştururken düşünüyordum. Is it possible to create a trigger in MySQL which would perform said actions, if so - how? Or is there a better way? Am I taking a crazy approach to this?

3 Cevap

Tek bir ekleme sorgusu kurma ve her kelime için oldukça ayrı bir sorgu daha bunu yürüterek önemli ölçüde daha hızlı bu PHP kodu yapabiliriz. Aksi takdirde, ben senin kod kötü görünüyor sanmıyorum.

Büyük hesaplamaları gerçekleştirmek tetikleyiciler başvurunuzu yavaşlatacaktır.

Ben periyodik olarak çalıştırmak ve sizin için çıkarma gerçekleştirmek için bir görev zamanlama daha iyi olduğunu düşünüyorum.

Eğer bu etiketlerin şerit PHP'nin "htmlentities" fonksiyonunu denediniz mi?