INSERT nur wenn Wort noch nicht existiert

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • INSERT nur wenn Wort noch nicht existiert

    Hallo,

    ich hab folgendes script:

    PHP-Code:
    if (isset($_REQUEST['submit_spamlist'])) {
      
    preg_match_all('/<word>(.*?)<\/word>/si'$online_spamlist$spamwords);
      
    $insert_str="";
      foreach (
    $spamwords[0] as $messung){
        
    preg_match('/<spamword>(.*?)<\/spamword>/si'$messung$name);
        
    $insert_str .= "(NULL , '".$name[1]."'), ";
      }
      
    $insert_strsubstr($insert_str0, -2);
      
    mysql_query("INSERT INTO ".$new_prefix."spamwords (id, spamword) VALUES ".$insert_str." ");

    Jetzt würde ich gern das INSERT nur erlauben wenn ein Vorkommen aus $insert_str noch nicht in der DB existiert.
    Also wenn ein Vorkommen in $insert_str in der DB bereits existiert dann füge nur alles andere in die DB ein.

    wää blöd ausgedrückt glaub ich... aber ich hoffe ihr versteht mich.

  • #2
    1) Spalte auf UNIQUE und dann

    INSERT INTO ... ON DUPLICATE KEY UPDATE

    (s. Manual)

    oder

    2) WHERE ... != 'name'
    ?

    edit: Hab glaub ich ein wenig an deinem Code vorbeigelesen. Hab nicht gesehen, dass du nur eine Query hast. Weiß nicht, wie das mit der Performance aussieht, wenn du für jedes INSERT eine Query machst...
    Zuletzt geändert von ZombieChe; 23.04.2007, 18:30.

    Kommentar


    • #3
      vielleicht so:

      1.
      Code:
      SELECT spamword FROM t
      2. mit array_diff() berechnen:
      Code:
      new_words - all_words_from_db
      3. insert auf das ergebnis ausführen.

      Kommentar


      • #4
        @penizillin

        DANKE!


        PHP-Code:
        if (isset($_REQUEST['submit_spamlist'])) {
            
        preg_match_all('/<word>(.*?)<\/word>/si'$online_spamlist$spamwords);
            
        $insert_str ""$spamwords_online="";
            foreach (
        $spamwords[0] as $messung){
                
        preg_match('/<spamword>(.*?)<\/spamword>/si'$messung$word);
                
        $spamwords_online[] .= $word[1];
            }

            
        $rs_ct_spamwords mysql_query("SELECT * FROM ".$new_prefix."spamwords");
            while(
        $daten_zeile mysql_fetch_array($rs_ct_spamwords)) {$db_spamwords[] = $daten_zeile['spamword'];}
            
        $new_spamwords array_diff($spamwords_online$db_spamwords);
            
            
        $i=0;
            while(
        $i count($new_spamwords)) {
                
        $insert_str .= "(NULL, '".$new_spamwords[$i]."'), ";
                
        $i++;
            }
            
        $insert_str substr($insert_str0, -2);

            
        mysql_query("INSERT INTO ".$new_prefix."spamwords (id, spamword) VALUES ".$insert_str."");

        Kommentar


        • #5
          Hmm jab da jetzt noch ein problem...

          das array $new_spamwords sieht jetzt z.B. so aus:

          Array (
          [1] => Wort1
          [8] => Wort2
          [13] => Wort3
          [19] => Wort4
          )

          gibt es ein möglichkeit den Key zu "reseten" das es so wird??

          Array (
          [0] => Wort1
          [1] => Wort2
          [2] => Wort3
          [3] => Wort4
          )

          Kommentar


          • #6
            array_values()

            Edit: endlich mal erster
            Zuletzt geändert von ministry; 23.04.2007, 21:44.
            ich glaube

            Kommentar


            • #7
              array_values()

              Kommentar


              • #8
                THX!!

                Kommentar


                • #9
                  Original geschrieben von ministry
                  Edit: endlich mal erster
                  OffTopic:
                  War ja auch einfach...

                  Kommentar

                  Lädt...
                  X