[SQL allgemein] Wörter splitten

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

  • [SQL allgemein] Wörter splitten

    Hallo

    Ich lese aus der Db Keywörter aus welche durch
    ein komma und leerzeichen getrennt sind, ausgebnen
    tut er mir das ganze aber als komplette zeile, ich will aber
    einzelnde wörter haben. Habe das ganze schon
    mit split versucht klappt aber irgendwie nicht.
    Hier mal der code vom script

    PHP-Code:
    <?php
      mysql_connect
    ("localhost",
      
    mysql_select_db("    ")
     or die (
    "Keine Verbindung moeglich");
      
    mysql_select_db("    ") or die
      (
    "Die Datenbank existiert nicht");




    $abfrage "SELECT keywords FROM dir_links ORDER BY id ASC LIMIT 0 , 20 ";
    $result mysql_query($abfrage);
    while (
    $row mysql_fetch_array ($result))  

    <<<
    hier müssten di doch schon gesplitet werden oder?>>>



    $data[] = $row['keywords']."\n".$row['keywords2']."\n".
    $row['keywords3']."\n".$row['keywords4']."\n".$row['keywords5']."\n".$row['keywords6']."\n".
    $row['keywords7']."\n".$row['keywords8']."\n".$row['keywords8']."\n".$row['keywords10']."\n".
    $row['keywords11']."\n".$row['keywords12']."\n".
    $row['keywords13'];

    }

    $data = implode('',$data);

    // Woerter splitten
    $words = preg_split("/\n/", $data);
    $acv = array_count_values( $words );

    $bannedwords = array("fuck", "ficken", "milf", "viagra", "votzen", "schlampe",);
    $i = 0;
    foreach($acv as $k=>$v) {
        if (!in_array($k,$bannedwords) and eregi("[a-zA-Z]",$k) and $i<=40 and strlen($k)>2) {
      if (isset($new_acv[strtolower($k)] )) 
      $new_acv[strtolower($k)] += $v;
      else 
      $new_acv[strtolower($k)] = $v;
      $i++;
        }
    }



    // Clouds erstellen
    foreach( $new_acv as $k=>$v) {
    $size = $v*1;
    $weight = $v*4;

    $k = str_replace (array("ä", "ö", "ü", "ß", " ", ","), array("ae", "oe", "ue", "ss", "-", " "), $k);
    $kurl = urlencode("$k");



    echo "<a href='suchwort/$kurl.html'>$k</a>&nbsp;&nbsp;&nbsp;\n";
    }


    ?>
    Danke schon mal für die Hilfe
    Zuletzt geändert von fuchs1271; 04.06.2008, 10:19.

  • #2
    1. code umbrechen
    2. falsches forum, daher * verschieb *

    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      1. Code umbrechen gemäss Board Regeln
      2. Wie stehen die Daten in $row['keywords']?
      3. Wenn du sagst die Keywords seien durch , und Leerzeichen getrennt. Wieso versuchst du dann die Keywords an \n zu splitten?
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        Statt
        $data[] = $row['keywords']."\n".$row['keywords2']."\n".
        $row['keywords3']."\n".$row['keywords4']."\n".
        $row['keywords5']."\n".$row['keywords6']."\n".
        $row['keywords7']."\n".$row['keywords8']."\n".
        $row['keywords8']."\n".$row['keywords10']."\n".
        $row['keywords11']."\n".$row['keywords12']."\n".
        $row['keywords13'];

        würde ich mal $data[] = $row['keywords'];
        verwenden
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Kommentar


        • #5
          Hallo

          So funktionierts nicht. Jetzt zeigt er mir die kompltten keywörter als einer zeile an welche dann komplett verlinkt ist. es soll aber jedes einzelne wort verlinkt sein. Ich denk das Problem ist das die wörter schon gesamt als zeile ausgelesen werden bzw übergeben werden

          Mfg Thomas

          Hier mal dein Link zum verstehen, der verlinkt nur die komplette zeile

          http://www.startkatalog.de/artikel-1...nkpflicht.html
          Zuletzt geändert von fuchs1271; 04.06.2008, 10:26.

          Kommentar


          • #6
            was steht denn in dieser Zeile:
            $data[] = $row['keywords']."\n".$row['keywords2']."\n".
            $row['keywords3']."\n".$row['keywords4']."\n".
            $row['keywords5']."\n".$row['keywords6']."\n".
            $row['keywords7']."\n".$row['keywords8']."\n".
            $row['keywords8']."\n".$row['keywords10']."\n".
            $row['keywords11']."\n".$row['keywords12']."\n".
            $row['keywords13'];

            Deiner Meinung nach in den ganzen $row['keywordsnn'] ??

            nix!
            Beantworte nie Threads mit mehr als 15 followups...
            Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

            Kommentar


            • #7
              mit $row['keywords'] gebe ich an wieviele einzelne angezeigt werden welches ich noch mit
              PHP-Code:
              ORDER BY id ASC LIMIT 0 "; 
              angeben kann, werde jetzt mal das auf 3 setzen, damit du das mal siehst.
              dann macht der mir wie drei sätze.

              Mfg Thomas

              Kommentar


              • #8
                Die Frage war eine andere...
                was steht in $row['keywords2']??
                -> nix, also was soll der Blödsinn mit den ganzen keywords???
                Beantworte nie Threads mit mehr als 15 followups...
                Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                Kommentar


                • #9
                  Afaik gibt es keine String Split Funktion in MySql. Habe zumindest nix im Manual gefunden. Also wirst du die Keywords mit PHP Mitteln zerlegen müssen. Wenn also die KWs durch , getrennt sind dann könntest du das folgende probieren
                  PHP-Code:
                  $abfrage "SELECT keywords FROM dir_links ORDER BY id ASC LIMIT 0 , 20 ";
                  $result mysql_query($abfrage);
                  while (
                  $row mysql_fetch_array ($result)) {
                    
                  $data[]['keywords'] = explode(', ',$row['keywords']);
                  [...] 
                  Dann sollte zu jedem Datensatz ein Array keywords existieren, wo die einzelnen KW als Elemente drin stehen.
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Kommentar


                  • #10
                    Nehme ich das raus so das nur noch einmal $row['keywords'] da steht verbindet er alles zu einer zeile, siehe seite.

                    oder kann man das ganze ander lösen?
                    sprich in der datenbank steht die Tabelle keywords mit wort, wort2, wort3 usw. und das will ich auslesen und jedes einzelnd verlinken mit der suche, so wie das jetzt auch schon der fall ist nur das ich die einzelnen wörter nicht rausbekomme.

                    Mfg Thomas

                    Kommentar


                    • #11
                      MelloPie hat völlig recht. Und in $data steht genau dasselbe wie $row[$keywords], plus ein paar Zeilenumbrüche. Dein Problem ist nicht (nur) das Aufteilen der Wörter, sondern das Auslesen der Datenbank und das nicht normalisierte DB-Design. Mach für jedes Wort einen eigenen DB-Eintrag, dann wird dir solches Gewürge erspart.

                      Falls dich das aber überfordert, und du lieber dein vertraktes Design weiterpflegst, mit
                      PHP-Code:
                      <?php
                      $abfrage 
                      "
                          SELECT 
                              keywords 
                          FROM 
                              dir_links 
                          ORDER BY 
                              id ASC 
                          LIMIT 
                              0 , 20 "
                      ;
                      $result mysql_query($abfrage) or exit(mysql_error());
                      $words = array();
                      while (
                      $row mysql_fetch_assoc($result))  {
                          
                      array_push($wordspreg_split('/\s*,\s*/U'$row[$kewords]));
                      }
                      ?>
                      hast du dann alle Wörter einzeln in $words
                      Zuletzt geändert von H2O; 04.06.2008, 11:55.
                      Gruss
                      H2O

                      Kommentar


                      • #12
                        Irgendwie funktioniert das ganze nicht, wenn ich ne neue tabelle anlege und jedem wort eine id zuweise gehts komischer weise, siehe link.

                        also jetzt ist es so

                        id wort
                        id wort2

                        und so gehts nicht
                        id keywords
                        wort

                        id keywords
                        wort2

                        Mfg Thomas
                        Zuletzt geändert von fuchs1271; 04.06.2008, 11:52.

                        Kommentar

                        Lädt...
                        X