Suche mit * und ? realisieren

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

  • Suche mit * und ? realisieren

    Also ich habe ein Textfeld, in dem steht:
    "Dies ist das Haus von Nikolaus"
    "Dies ist das Haus von Nicolaus"

    Jetzt habe ich ein Suchfeld und jemand gibt ein, such nach "Nikolaus". Jetzt bekomm ich meinen erste Text zurück.
    Ich möchte dem User aber die Möglichkeit geben, wenn er einen Buchstaben nicht weiß ihn duch ? zu ersetzen. So dass, such nach "Ni?olaus" daraus wird und er soll nun beide Texte zurückbekommen.

    Genauso möchte ich, dass man mehrere oder nur einen einzigen (wie oben) Buchstaben durch ein * ersetzen kann. Mann soll praktisch nach der Suche nach "Ste*an", Stefan, Stephan zurück bekommen.

    Wie lässt sich sowas realisieren. Die * und ? raus parsen ist ja relativ einfach aber wie sieht sowas dann im SQL aus?

    MfG Markus

  • #2
    Ich wüsste niemanden, der so sucht, wie Du es Dir ausmalst.

    Würde eher mit LIKE arbeiten und dem Nutzer beispielsweise sagen: "Bitte mindestens 3 Buchstaben angeben."

    Kommentar


    • #3
      Oh doch, des geht.
      Schau dir mal des WebPac an
      http://141.28.159.112/webpac/WPstart.shtml?bw.fw
      (öffnet sich in einem PopUp, also PopUp stopper ausschalten)

      Gib bei "Einfache Suche" mal "Ste*an" ein und geh dann auf Seite 2 der Trefferliste. Dort findet sich dann ein "Stefan" und ein "Stephan".

      Gibst du nur "Ste?an" an, bekommst du nur den Stefan

      Wie lässt sich sowas mit mySQL verwirklichen?

      Apropo, so eine Suche ist eigentlich Standard in jedem Thesaurus oder einem Schlagwortkatalog

      MfG Markus
      Zuletzt geändert von markusschmitt; 03.03.2004, 19:02.

      Kommentar


      • #4
        REPLACE() ist dein Freund und die wildcard _
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Kommentar


        • #5
          HÄ?

          Ich seh jetzt keinen Zusammenhang zwischen REPLACE und meinem Problem. Könntest du das bitte erklären?

          MfG Markus
          Zuletzt geändert von markusschmitt; 03.03.2004, 19:11.

          Kommentar


          • #6
            replace ... um die ? oder * in deinem text fuer mysql durch % zu ersetzen .... % = wildcard ....

            gruss
            iglo

            Kommentar


            • #7
              Gut aber wenn ich ? durch % ersetze und * auch durch % ersetze bekomm ich doch das gleiche Ergebnis. Z.B. WHERE UPPER(zeile3) LIKE '%UPPER(aufgabe)%'. (Funktioniert UPPER in LIKE eigentlich?)Hier bekomm ich denn Hausaufgabe, Hausaufgaben und Aufgabe, Aufgaben usw. zurück.

              Oder gibt es zwei verschiedene Wildcards?
              Ich kenn nur %

              MfG Markus

              Kommentar


              • #8
                http://www.mysql.com/doc/de/String_c...functions.html

                da stehen zwei
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  Ah gerade die Lösung gefunden.
                  http://medlib.med.utah.edu/medstat_o...ysql_wildcards

                  Wenn das aber die Tabelle ist, dann brauch ich nichts zu replacen und kann direkt den eingegebenen String nehmen. Oder etwa nicht?

                  MfG Markus

                  Kommentar


                  • #10
                    Ah OK Danke

                    -- muss man ziemlich weit nach unten scrollen, naja

                    MfG Markus

                    Kommentar


                    • #11
                      "ziemlich weit" ist relativ...

                      zu deiner tabelle: da wo (Unix) hintendran steht is auch Unix mit gemeint und nicht SQL
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        Ah OK, Danke,

                        Stimmt die Syntax so?
                        ... AND spalte3 LIKE '(REPLACE('REPLACE('*auf?gabe*','*','%')','?','_'))'

                        Hab gerade keine Tabelle zum Testen da

                        MfG Markus
                        Zuletzt geändert von markusschmitt; 03.03.2004, 20:27.

                        Kommentar


                        • #13
                          OK, hab doch eine passende Tabelle gefunden und hab's mal in phpmyadmin eingegeben.

                          SELECT path, directory FROM serverlink WHERE path LIKE '(REPLACE(REPLACE('*stuff*','*','%'),'?','_'))'

                          PHP-Code:
                          SELECT pathdirectory
                          FROM serverlink
                          WHERE path
                          LIKE 
                          '(REPLACE(REPLACE(' stuff ',' ',' '),' ',''))'
                          LIMIT 0 30 

                          MySQL meldet


                          #1064 - You have an error in your SQL syntax near '?  ','_ '))' LIMIT 0, 30' at line 4 
                          Wo ist da was?


                          habs jetzt nochmal umgestellt. Des klappt aber auch net.
                          SELECT REPLACE(REPLACE('*stuff*','*','%'),'?','_') AS text, path, directory FROM serverlink WHERE path LIKE text
                          PHP-Code:
                          SELECT REPLACE (


                          REPLACE (
                          '*stuff*',
                          '*',
                          '%'
                          ),
                          '?',
                          '_'
                          ) AS text,
                          path,
                          directory
                          FROM serverlink
                          WHERE path
                          LIKE text
                          LIMIT 0 
                          ,
                          30 

                          MySQL meldet



                          #1054 - Unknown column 'text' in 'where clause' 
                          MfG Markus
                          Zuletzt geändert von markusschmitt; 03.03.2004, 21:13.

                          Kommentar


                          • #14
                            ARG, habs raus

                            SELECT path, directory FROM serverlink WHERE path LIKE (REPLACE(REPLACE('*stuff*','*','%'),'?','_'))

                            2 ' waren mein Verhängnis

                            MfG Markus

                            Kommentar

                            Lädt...
                            X