Tabelle nach einem String durchsuchen

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

  • Tabelle nach einem String durchsuchen

    moin, habe mal wieder n Problem.

    Endlich läuft mein selbstgeschriebenes Lexikon.
    Ich kann einen Suchbegriffeingeben und alle Datensätze in denen der Suchbegriff vorkommt werden ausgespuckt.
    Auch evtl. vorhandene "" werden entfernt.

    Jetzt habe ich folgendes festgestellt:

    Besteht der Suchbegriff nur aus 2 Buchstaben, was im chinesischen relativ oft vorkommt wird jeder Datensasz ausgespuckt der diesen String enthält.
    Ist ja auch so programmiert.

    Fakt: Nach "an" wird gesucht und da die Konstellation an fast überall vorkommt (ANhANg, ANgriff uvm.) wird fast die ganze Datenbank ausgegeben. Ist natürlich nicht toll.

    Müßte doch so gehen das ich vorher irgendwiesicherstelle, das der Suchstring nicht mitten in einem wort beginnt. Das wäre schon mal ein Ansatz un des würden fast nur noch richtige Treffer angezeigt.

    Weiß jemand Rat???

    MfG
    Sipart

  • #2
    kommt auf dein LIKE an
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      gespannt sei

      hier ist mein like:

      $sql = "SELECT deu , chin

      FROM lexikon



      WHERE deu LIKE '%". $_POST['search'] ."%'

      OR chin LIKE '%". $_POST['search'] ."%'";



      $search ist der suchstring

      evtl vorhandene "" habe ich kurz vor der ausgabe
      mittels str_replace entfernt.

      Kommentar


      • #4
        [ ] du weiß, was die % bei LIKE bewirken
        [x] du liest jetzt sofort http://dev.mysql.com/doc/mysql/de/St...functions.html
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          hm, hat mir nicht so ganz geholfen

          die % sollen platzhalter sein.

          aber wie bekomme ich das so hin das jeder datensatz ausgelesen wird
          in dem der Suchstring auch direkt den Anfang eines wortes darstellt und nicht irgendwo mittendrin anfängt?

          Kommentar


          • #6
            Re: hm, hat mir nicht so ganz geholfen

            Original geschrieben von Sipart
            die % sollen platzhalter sein.

            aber wie bekomme ich das so hin das jeder datensatz ausgelesen wird
            in dem der Suchstring auch direkt den Anfang eines wortes darstellt und nicht irgendwo mittendrin anfängt?
            Original geschrieben von Sipart
            LIKE '%". $_POST['search'] ."%'
            Exkurs logisches Denken - Anfang
            • du verwendest je ein % vor und nach dem eigentlichen suchbegriff
            • ein % ist ein platzhalter und steht für beliebig viele (oder kein) zeichen
            • du willst, dass der text in der spalte mit dem suchbegriff anfängt
            • wenn der text mit dem suchbegriff anfangen soll, dann darf nichts davor stehen
            • "nichts davor stehen" heißt: kein zeichen
            • wenn kein zeichen davor stehen darf, dann solltest du der datenbank nicht sagen, dass beliebig viele (oder kein) zeichen davor stehen dürfen/darf


            Exkurs logisches Denken - Ende


            Wenn du den von mir geposteten Link nicht gelesen hast, dann bist du verdammt faul

            Wenn du den von mir geposteten Link gelesen hast und es trotzdem nicht verstanden hast, dann bist du blöd

            such dir was aus
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Exkurs logisches denken Teil II

              Hi, bin weder faul noch blöd habe mich vielleicht etwas seltsam ausgedrückt.

              Befasse mich erst seit wenigen Tagen mit PHP und mySQL habe deshalb auch die Schwierikeiten.

              Das mit dem % habe ich gerallt.

              Setzte ich das % nach vorne werden Datensätze wie zB
              "Angriffstufe mittel" ausgegeben. bis hierher korrekt.

              Lautet der Datensatz aber "Die Angriffstufe mittel"
              wird er nicht ausgegeben. Sollte aber.



              es sollen datensätze gefiltert werden die den such string innerhalb eines wortes haben:

              "Abrollen nach hinten" hier kommt der Suchstring "an" soll aber dennoch nicht ausgegeben werden.

              bis jetzt alles ok?

              Danke

              Kommentar


              • #8
                Re: Exkurs logisches denken Teil II

                Original geschrieben von Sipart
                "Abrollen nach hinten" hier kommt der Suchstring "an" soll aber dennoch nicht ausgegeben werden.
                wo steht da "an"?

                schreib vor dein $sql = mal
                PHP-Code:
                echo 
                und ein leerzeichen

                das gibt dir das SELECT aus, wie es die datenbank bekommt
                poste das bitte mal

                was für einen datentyp haben die spalten deu und chin?
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  re

                  hier der ganze code:


                  $sql = "SELECT deu , chin

                  FROM lexikon



                  WHERE deu LIKE '%". $_POST['search'] ."%'
                  OR chin LIKE '%". $_POST['search'] ."%'";



                  $result = mysql_query($sql);



                  echo '<h4>Zum gesuchten Begriff:'. $_POST['search'] .'<br>wurden:'. mysql_num_rows($result) .' Einträge gefunden.</h4>';



                  while ($r = mysql_fetch_array($result))

                  {



                  $r['deu']=str_replace(chr(34),chr(32),$r['deu']);

                  $r['chin']=str_replace(chr(34),chr(32),$r['chin']);



                  echo "Deutsch: ". $r['deu']."\n<br>";

                  echo "Chines .: ". $r['chin']."\n<br><br>";

                  }



                  Die Spalten DEU und CHIN sind vom Typ tinytext.

                  ich hoffe das hilft weiter

                  Kommentar


                  • #10
                    PHP-Code:
                    echo $sql "SELECT deu , chin
                    FROM lexikon
                    WHERE deu LIKE '%"
                    $_POST['search'] ."%'
                    OR chin LIKE '%"
                    $_POST['search'] ."%'"
                    ausgabe?

                    wenn du absolut nicht weiterkommst, dann schalt mal die mailadresse in deinem profil frei
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      hier die ausgabe

                      SELECT deu , chin FROM lexikon WHERE deu LIKE '%an%' OR chin LIKE '%an%'


                      ERGEBNISSE:



                      Deutsch: A.-punkt auf der Fußsohle
                      Chines .: Yong quan

                      Deutsch: Abgleitende Hand
                      Chines .: Lap sau

                      Deutsch: Abhandlung über die Bewegung der Sehnen
                      Chines .: I chin ching

                      Deutsch: Abrollen nach hinten aus dem Handstand
                      Chines .: Fu-Jow-Pai


                      folgende Sätze die richtig wären wurden nicht ausgegeben

                      deu :Rhythmisches Massieren Technik des Tuina
                      chin An

                      deu : Ändern Löschen Ruhe Stille Frieden
                      chin An

                      deu : Ändern Löschen Stoßen Tai-chi-Grundbewegung
                      An

                      deu :Ändern Löschen Stoßen/schieben
                      chin An

                      Kommentar


                      • #12
                        vielleicht ist es sinnvoller nach der abfrage den datensatz zu überprüfen ob vor dem Suchstring ein Leerzeichen vorhanden ist???

                        Kommentar


                        • #13
                          wenn ich das bei mir lokal versuche, dann kann ich das nicht reproduzieren; ich bekomme alle datensätze


                          hab dir mal ne mail geschrieben, also nicht erschrecken *g*
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar

                          Lädt...
                          X