Ankündigung

Einklappen
Keine Ankündigung bisher.

Suche mit variabler Suchbegriffanzahl in MySQL Datenbank

Einklappen

Neue Werbung 2019

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

  • Suche mit variabler Suchbegriffanzahl in MySQL Datenbank

    Hallo,

    Ich möchte eine Suche in eienr MySQL Adressdatenbank realisieren. Dazu soll es nur EIN Suchfeld geben in das der Nutzer eine beliebige Anzahl an begriffen eingeben kann.

    Ein Leerzeichen würde als Trennzeichen für die Begriffe dienen.
    Nach Verarbeiten des Formulars habe ich alle einzelnen Begriffe in einem Array vorliegen.

    Als Beispiel sieht die Datenbankstruktur so aus:
    ID, Vorname, Name, Strasse, PLZ, Ort

    Der User soll aber die Möglichkeit haben mit den Begriffen beliebige Felder zu durchsuchen.
    Das heißt er kann in das Eingabefeld eingeben: "Hans Meier", "Müller Berlin" oder "Hauptstraße Frank" oder auch nur "Müller"

    Es soll jeder Datensatz gefunden werden der ALLE Suchbegriffe einthält. Ob dabei alle Begriffe in der gleichen Spalte oder in verschiedenen Spalten stehen und in welcher Reihenfolge sie vorkommen soll egal sein.

    Das einzige was mir bisher eingefallen ist wäre eine Abfrage wie:

    ...
    WHERE
    (Vorname LIKE '%begriff1%' OR NAME LIKE '%begriff1%' OR Strasse LIKE '%begriff1%' OR ...)

    Bei jedem weiteren Begriff käme dann ein:
    AND (Vorname LIKE '%begriff2' ...)


    Diese Bedingung würde ich dann für jeden Begriff mit einer Schleife generieren lassen. Würde gehen, aber gäbe es noch einen einfacheren Weg?

  • #2
    ->mysql such index

    Kommentar


    • #3
      Die PLZ Spalte (sofern nicht VARCHAR) kriegst du dann aber nicht mit rein in die Volltext-Suche. Musst du eben manuell reinpfriemeln.

      Kommentar


      • #4
        ->mysql such index
        Volltextsuche über den Index bringt leider nicht immer das Gewünschte Ergebnis:

        Wenn ich Beispielsweise nach "Müller" suche, dann bringt er mir korrekterweise die Einträge mit "Müller", suche ich allerdings nach "üller" bringt er mir gar keine Ergebnisse.
        Tippe ich nur einen Buchstaben ein, z.B. ein "i", dann soll er mir alle Einträge bringen die diesen einen Buchstaben enthalten und bei der Indexsuche bekomme ich so ebenfalls keine Ergebnisse.

        Laut dem MySQL Tutorial wertet er die Suchbegriffe nach ihrer Relevanz und lässt Begriffe, die sehr häufig vorkommen weg. Das mag für Textsuche sinnvoll sein, aber ich brauche alles mit einer exakten Übereinstimmung.
        Hab ich etwas falsch gemacht oder lässt sich das nicht mit der Volltext Suche realisieren?

        Kommentar


        • #5
          Da hast du schon Recht, die Volltextsuche ist nicht immer nachvollziehbar und läßt oft Treffer weg.

          Machs halt notfalls so wie du oben schon geschrieben hast. phpMyAdmin macht es auch nicht anders..

          Kommentar


          • #6
            ok, danke dann werde ich das so probieren.

            Was meint ihr, ist aus performance Sicht günstiger? So wie ich es oben geschrieben habe oder alle Spalten zu einer zusammenfassen und dann jeweils mit jedem Begriff vergleichen, d.h.:

            CONCAT_WS(' ',vorname,name,strasse,...) LIKE '%begriff1%' AND
            CONCAT_WS(' ',vorname,name,strasse,...) LIKE '%begriff2%' ...

            Kommentar

            Lädt...
            X