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 (mitsomething%
, Indizes können weiterhin verwendet werden). - meine zuvor erwähnte Methode "den Namen in zwei Spalten aufteilen".