Kurze Wörter aud Mysql Table "Tags_Keywords" entfernen

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

  • Kurze Wörter aud Mysql Table "Tags_Keywords" entfernen

    Hallo,
    ich habe folgende Herausvorderung und wäre dankbar für Angegungen.

    Ich habe eine große Mysql DB Tabelle in der Artikel verschlagwortet sind.
    D.H. es existiert eine Spalte "Tags_Keywords".

    Ich benötige ein Script das ich in regelmäßigen Abständen benutzen möchte um alle Wörter unter 5 Zeichen zu entfernen.

    Also so eine Art Wartungsscript zur Keyword-Bereinigung.

    Danke.

  • #2
    Wenn es in einem Wald ein großes Loch gibt und immer wieder Tiere hinein stürzen, dann kaufst du einen Kran, um die Bergung zu erleichtern? Warum schüttest du das Loch nicht zu oder ziehst einen Zaun ringsum?

    Sorge dafür, dass die unerwünschten Daten gar nicht erst in die DB geschrieben werden!

    Klingt auch nicht sehr normalisiert ...

    Kommentar


    • #3
      OffTopic:
      Ich würde den Kran kaufen ...
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        Auch wenn onemorenerd schon eine sehr schöne Antwort gefunden hat, auch wenn sie das Problem der schon vorhandenen Datensätze nicht löst. Hier noch meine Gedanken wie du das Problem lösen kannst.

        1. Verhindere, wie onemorenerd schon gesagt hat, das die unerwünschten Daten in die DB kommen.

        2. SQL-Query zum löschen von den vorhandenen Datensätzen:
        PHP-Code:
        <?php
        mysql_query
        ("DELETE * FROM deine_tabelle WHERE LENGTH(deine_tabelle.Tags_Keywords) < 5");
        ?>
        3. Kein Gewähr auf 100%-ige Funktionsfähigkeit. Meine gelesen zu haben das die Funktionen LENGTH() Probleme mit UTF-8 codierten Strings haben kann... Teste es am besten erstmal indem du DELETE mit SELECT tauschst..

        Viel Erfolg.

        Grüße

        Björn

        Kommentar


        • #5
          Ich befürchte, dass er in der Spalte Tags_Keywords nicht einzelne Wörter sondern Wortkolonnen stehen hat. Das meinte ich mit "nicht normalisiert".

          Egal, er spricht anscheinend nicht mehr mit uns. Er wollte wohl ein fertiges Script und keine guten Ratschläge.

          Kommentar


          • #6
            Danke euch für die Hilfe und entschuldigt die späte Reaktion,

            ich habe eine Tabelle "texte" mit einer Spalte "Tags" mit folgendem Inhalt:

            "Langwort kurz langwort1 kurz und Längereswort"

            Nach der SQL Anweisung soll dann nur noch:

            "Langwort langwort1 Längereswort"

            erhalten bleiben.

            Ich fürchte diese funktion kann das nicht leisten

            [COLOR=#000000][COLOR=#CC0000]"DELETE * FROM deine_tabelle WHERE LENGTH(deine_tabelle.Tags_Keywords) < 5"[/COLOR][COLOR=#006600][/COLOR][/COLOR]

            oder?

            [COLOR=#000000][COLOR=#CC0000]
            [/COLOR][COLOR=#006600][/COLOR][/COLOR]

            Kommentar


            • #7
              Zitat von basst Beitrag anzeigen
              Ich fürchte diese funktion kann das nicht leisten
              [COLOR=#000000][COLOR=#cc0000]"DELETE * FROM deine_tabelle WHERE LENGTH(deine_tabelle.Tags_Keywords) < 5"[/COLOR][/COLOR]
              Da befürchtest du richtig. Eine Möglichkeit die mir noch einfällt ist, ein Script zu schreiben das deine Tag-Felder ausliest, das Ergebnis dann mit explode(" ", $deine_spalte) in einen array zerlegt und dann die elemente einzeln durchlaufen und schauen ob die weniger als 5 Zeichen haben.

              Auf die Schnelle ungefähr so:
              PHP-Code:
              <?php
              $res 
              mysql_query("SELECT Tags FROM deine_tabelle ORDER BY was_weiss_ich ASC");
              while(
              $row mysql_fetch_array($res)) {
              $tmp explode(" "$row['Tags']);
                   foreach(
              $tmp as $key=>$tag) {
                      if(
              strlen($tag) < 5) {
                         unset(
              $tmp[$key]);
                      }
                   }
               
              $neue_tags implode(" "$tmp);
              }
              ?>
              Innerhalb der while-Schleife musst du jetzt noch UPDATE-Queries einbauen, damit deine bereinigten Tags wieder in die DB kommen.

              Kommentar


              • #8
                Vielen Vielen Dank,
                das hab ich jetzt daraus gemacht, ich fürchte aber es fehlt noch was.
                Prinzipiell würde ich auch lieber alles in MYSQL abfeuern z.B. über MYSQL Querybrowser oder phpMyadmin, geht das überhaupt nur mit Mysql, wenn ja wie?


                PHP-Code:
                <?php
                $db_server   
                'localhost';
                $db_name     'db';
                $db_username 'root';

                $db_connection_charset 'utf8';

                $res mysql_query("SELECT tags FROM group_profile");
                while(
                $row mysql_fetch_array($res)) {
                $tmp explode(" "$row['tags']);
                     foreach(
                $tmp as $key=>$tag) {
                        if(
                strlen($tag) < 5) {
                           unset(
                $tmp[$key]);
                        }
                     }
                 
                $neue_tags implode(" "$tmp);
                $sql "UPDATE group_profile SET tags ='$neue_tags'";
                @
                mysql_query($sql);

                }
                ?>

                Kommentar


                • #9
                  Zitat von basst Beitrag anzeigen
                  Vielen Vielen Dank,
                  das hab ich jetzt daraus gemacht, ich fürchte aber es fehlt noch was.
                  Jop, wenn deine Gruppen-Profile (leite ich jetzt mal ab) eine ID haben (davon gehe ich mal aus), musst du die natürlich in deinem Query mit angeben. Sprich "UPDATE ..... SET ...=... WHERE dein_id_feld=ID_des_Profils"

                  Du kannst die ID genau wie die Tags aus dem Ergebnis-Array ziehen (z.B. $id = $row['group_id'])

                  Kommentar


                  • #10
                    Ja sicher die Verbindung:

                    PHP-Code:
                    <?php
                    function filter($var)
                    {
                        return 
                    strlen($var) > 4;
                    }

                    $db_server   'localhost';
                    $db_name     'test';
                    $db_username 'root';
                    $db_passwort '';

                    $db=mysql_connect($db_server,$db_username,$db_passwort);
                    mysql_select_db($db_name);
                    $res mysql_query("SELECT text FROM a");
                    while(
                    $row mysql_fetch_array($res))
                    {
                      
                    $tmp explode(" "$row['text']);
                      
                    $t=array_filter($tmp,'filter');
                      
                    $sql "UPDATE a SET text ='".mysql_real_escape_string(implode(" "$t))."'";
                      @
                    mysql_query($sql);
                    }
                    ?>
                    Zuletzt geändert von ; 29.07.2009, 16:33.

                    Kommentar

                    Lädt...
                    X