Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Suchanfrage für kommagetrennten Namen

Ja, wenn es eine Möglichkeit gibt, können Sie beide last, first setzen und first last in die Datenbank, ist es besser, Ihr Schema richtig zu entwerfen.

Wenn Sie jemals versuchen, Teile zu durchsuchen oder anderweitig zu manipulieren von Spalten, ist Ihr Schema mit ziemlicher Sicherheit defekt. Es wird mit ziemlicher Sicherheit die Leistung beeinträchtigen.

Der richtige Weg ist, die Tabelle so zu haben:

T1  FirstName  LastName
==  =========  ========
 1  Pax        Diablo
 2  Bob        Smith
 3  George     Jones

Dann können Sie den vom Benutzer eingegebenen Namen effizienter aufteilen (einmal, bevor Sie die Abfrage ausführen), anstatt zu versuchen, jeden einzelnen Namen in der Datenbank aufzuteilen.

Falls die Datenbank enthält immer last, first , für eine Schemaänderung ist dies möglicherweise nicht erforderlich.

Das Problem, das Sie in diesem Fall haben, besteht einfach darin, die Eingaben des Benutzers zu interpretieren.

Eine Möglichkeit, obwohl es ein Leistungskiller ist, ist ein like für jedes einzelne Wort. Also, wenn der Benutzer pax diablo eingegeben hat , könnte Ihre resultierende Abfrage folgendermaßen lauten:

select T1 from mytable
    where T2 like '%pax%'
      and T2 like '%diablo%'

Auf diese Weise kümmern Sie sich nicht so sehr um die Reihenfolge.

Angesichts meiner Abneigung gegen langsame Abfragen würde ich jedoch versuchen, dies zu vermeiden, es sei denn, es ist absolut notwendig (oder Ihre Datenbank ist relativ klein und wird dies wahrscheinlich auch bleiben).

Es gibt viele Möglichkeiten, diese Art von Abfragen zu beschleunigen, wie zum Beispiel:

  • unter Verwendung der Volltextsuchfunktionen Ihres DBMS.
  • Nachahmung solcher Fähigkeiten durch Extrahieren und Speichern von Wörtern während des Einfügens/Aktualisierens (und Entfernen während des Löschens).
  • den vorherigen Fall, aber auch sicherstellen, dass zusätzliche Spalten mit kleingeschriebenen Werten der aktuellen Spalte verwendet werden (für Geschwindigkeit).
  • den Benutzern mitteilen, dass sie last, first verwenden müssen Suchformular.
  • versuchen, %something% zu vermeiden Suchzeichenfolge so weit wie möglich (mit something% , Indizes können weiterhin verwendet werden).
  • meine zuvor erwähnte Methode "den Namen in zwei Spalten aufteilen".