Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL Like-Abfrage

Einklappen

Neue Werbung 2019

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

  • MySQL Like-Abfrage

    Hallo,

    ich möchte gerne eine Like-Abfrage aus einem Input-Feld in eine PHP-Datei bringen.
    Folgendermaßen stelle ich mir das vor:
    Ein Input-Feld in dem folgendes Muster eingegeben werden kann:
    [Nachname][Leerzeichen][Vorname] oder anders herum
    PHP-Code:
    ... WHERE ... OR (vorname.' '.nachname LIKE $string OR nachname.' '.vorname LIKE $string
    Das ist nur ein Beispiel um es zu verdeutlichen.

    Das Problem dabei ist nämlich, dass ich zwar immer abfragen kann where nachname LIKE $string oder vorname LIKE $string, aber nicht im oben genannten Schema.

    Gibt es dafür auch eine Lösung?

  • #2
    Warum ein Input-Feld?

    Kommentar


    • #3
      Zitat von Arne Drews Beitrag anzeigen
      Warum ein Input-Feld?
      Warum nicht? Geht bei Facebook ja auch, also wird´s dafür auch eine Möglichkeit geben.

      Kommentar


      • #4
        Ja, beim Leerzeichen splitten und beide Teile auf Vor- ODER Nachname prüfen.
        Ich finds bloß besser, zwei Eingabefelder zu haben, dann ist auf jeden Fall die Query übersichtlicher.

        Nicht alles, was Facebook macht ist gleichzeitig gut!

        Kommentar


        • #5
          Zitat von Arne Drews Beitrag anzeigen
          Ja, beim Leerzeichen splitten und beide Teile auf Vor- ODER Nachname prüfen.
          Ich finds bloß besser, zwei Eingabefelder zu haben, dann ist auf jeden Fall die Query übersichtlicher.

          Nicht alles, was Facebook macht ist gleichzeitig gut!
          Danke, mit gesplitteten Strings gelöst
          Klar, aber Facebook verwendet meiner Meinung nach moderne Technik und ist deshalb für mich ein kleines Idol.

          Kommentar


          • #6
            Auf das Leerzeichen als Trenner kannst Du dich aber nicht immer verlassen. Wenn jemand z.B. Antonio Da Silva heißt, dann ist im Nachnamen selbst ja schon ein Leerzeichen enthalten.
            Facebook hat zwar vielleicht auch nur das eine Input-Feld wie Du, aber sicherlich nicht nur ein Query/zwei Zeilen bei der Verarbeitung

            Kommentar


            • #7
              Du solltest mit MySQL-Volltextsuche zum Ziel kommen.
              http://dev.mysql.com/doc/refman/5.1/...xt-search.html
              Aber gerade Namenssuche ist immer so eine Sache, weil Namen keiner Rechtschreibregel unterliegen. Wenn das richtig gut werden soll, solltest Du Dir auch Soundex oder Kölner Phonetik anschauen.

              Kommentar


              • #8
                Wenn jemand z.B. Antonio Da Silva heißt, dann ist im Nachnamen selbst ja schon ein Leerzeichen enthalten
                Na und?!

                Die Volltextsuche ist hier imho auch nicht geeignet, da die Stringlännge des Suchbegriffs hier größer ist als die Stringlänge in der gesucht werden soll.

                Kommentar


                • #9
                  Zitat von Arne Drews Beitrag anzeigen
                  Na und?!
                  Wieso na und?! Der Eintrag wird dann nicht gefunden und ich denke das ist doch die Hauptaufgabe der Suche..
                  Wenn "Da Silva Antonio" eingegeben wird, sucht er nach
                  Code:
                  vorname LIKE 'Da' OR nachname LIKE 'Silva Antonio' //vice versa
                  und dann findet er nichts

                  Kommentar


                  • #10
                    Nö, bei Leerzeichen splitten heißt, es ergibt drei Teile:
                    Code:
                    [0] Antonio
                    [1] Da
                    [2] Silva
                    ...die Suchanweisung wird sinnvollerweise bspw. per Schleife aufgebaut und dann gibts auch da Treffer...

                    Kommentar


                    • #11
                      Zitat von Arne Drews Beitrag anzeigen
                      Nö, bei Leerzeichen splitten heißt, es ergibt drei Teile:
                      Code:
                      [0] Antonio
                      [1] Da
                      [2] Silva
                      ...die Suchanweisung wird sinnvollerweise bspw. per Schleife aufgebaut und dann gibts auch da Treffer...
                      Wie willst du das mit einer Schleife realisieren? Es werden dann ja drei Querys!?

                      Kommentar


                      • #12
                        Zitat von Arne Drews Beitrag anzeigen
                        die Suchanweisung wird sinnvollerweise bspw. per Schleife aufgebaut und dann gibts auch da Treffer...
                        Von einer Schleife war noch nicht die Rede
                        Natürlich wäre das möglich, aber ich glaube der TE hatte einfach nicht dran gedacht, dass es ja auch Leerzeichen im Nachnamen/Vornamen geben kann und deswegen hatte ich es erwähnt.

                        jdizzle: Du musst ja nicht drei Queries erstellen, sondern kannst Dir die WHERE-Bedingung in einer Schleife aufbauen.

                        Kommentar


                        • #13
                          Wie willst du das mit einer Schleife realisieren? Es werden dann ja drei Querys!?
                          Die Where-Klausel mit einer über die gesplitteten Elemente iterierenden Schleife zusammensetzen und als eine SQL-Anweisung abfeuern, wo ist das Problem?!

                          Kommentar


                          • #14
                            Die Volltextsuche ist hier imho auch nicht geeignet, da die Stringlännge des Suchbegriffs hier größer ist als die Stringlänge in der gesucht werden soll.
                            Zitat aus dem Handbuch (Hervorhebung von mir):
                            Die Funktion MATCH() führt eine natursprachliche Suche nach einem String in einer Textsammlung durch. Eine Sammlung ist eine Menge von einer oder mehreren Spalten, die Bestandteil eines FULLTEXT-Indexes sind.
                            http://dev.mysql.com/doc/refman/5.1/...xt-search.html

                            Die Suche mit "LIKE %Suchbegriff%" kann sehr langwierig sein, weil bei führendem Platzhalterein gewöhnlicher Index nicht genutzt werden kann. Wär's meine Aufgabe, ich würd' mir die Volltextsuche mal angucken.

                            Kommentar


                            • #15
                              Ich glaub, Du hast recht... Probiere das heut Abend mal aus...

                              Kommentar

                              Lädt...
                              X