SQL Spalten in where zusammenfassen

S

Sasku

Gast
Hey Leute,

ich habe ein Programm, bei dem ich eine Suchfunktion einbaue und es soll eine Tabelle durchgelaufen werden. Jetzt ist es dass ich in der Tabelle Vor und Nachname getrennt halten muss. Kann ich jetzt bei der Suchfunktion das irgendwie hinbekommen, dass ich so etwas sage wie:

gebe mir alles zur Tabelle gpperson aus ( select * from gpperson) wo isInstructor = yes ( where "isInstructor" = 'Yes .. bis dahin hab ichs ja noch ) und gleichzeitig ( da würde dann wahrscheinlich ein and hinkommen ) firstname und lastname like = '%Suchbegriff%';

wie kann man das dort machen? Danke schon mal für die hilfe :)
 
... where isInstructor = 'yes' and (firstname like '%Suchbegriff%' or lastname like '%Suchbegriff%')
 
Wenn ich dich richtig verstehe müsste das dann in etwa:

Select * FROM gpperson where IsInstructor='Yes AND firstname LIKE %Suchbegriff%

müsste so funktionieren, bin mir allerdings nicht hundert Prozent sicher

Edit: ist aber schneller gegooglet, als hier auf ne antwort gewartet ;)
 
Auch wenn die Lösung funktioniert, ist sie performancetechnisch ziemlich ungünstig. Der Grund ist, dass die Datenbank hier dann in der Regel wirklich jeden einzelnen Eintrag der Tabelle durchgehen muss und erst die beiden Felder zusammenfügen muss bevor mit dem Suchstring verglichen werden kann. Es können somit keine Indexe genutzt werden und auch das konkatenieren ist erstmal viel langsamer als wenn einfach nur ein Vergleich nötig wäre.

Viel besser wäre es wenn du den Suchbegriff einfach aufsplittest und dann die Felder getrennt abfragst. Das Aufsplitten sollte mit der Programmiersprache, die du hast, normalerweise recht problemlos gehen (bei PHP z.B. mit explode()). Das wäre auch die am Meisten zu empfehlende Möglichkeit. Alternativ gehts auch in SQL, bei MySQL z.B. so:
AND firstname = SUBSTRING_INDEX('suchstring', ' ', 1) and lastname= SUBSTRING_INDEX('suchstring', ' ', 2)
Vorteil ist hier, dass (wenn die Datenbank einigermaßen gut programmiert ist) die beiden Ausdrücke mit substring_index nur 1x ausgewertet werden müssen und nicht pro Zeile. Des Weiteren sollte auch eine Indexnutzung möglich sein.
 
Zurück
Oben