![]() |
Datenbank: MySQL • Zugriff über: PHP
In allen Felder suchen
Hallo,
ich bräuchte noch mal eure Hilfe. Also wie man nach einem oder mehrern Feldern filtert, weiß ich.
SQL-Code:
Aber wie sieht die Abfrage aus, um in allen Feldern nach Müller zu suchen?
SELECT name, vorname, telefonnumer FROM adressen where name='Müller'
|
Re: In allen Felder suchen
Indem du alle aufführst?
SQL-Code:
SELECT name, vorname, telefonnumer
FROM adressen WHERE name LIKE '%Müller%' OR vorname LIKE '%Müller%' OR telefonnumer LIKE '%Müller%' |
Re: In allen Felder suchen
Ja, gut. Aber gibt es da keine elegantere Lösung?
|
Re: In allen Felder suchen
Ein bißchen eleganter ists imho so (verkürzt das Statement ein wenig):
SQL-Code:
Ist aber Geschmackssache. :)
SELECT name, vorname, telefonnumer FROM adressen where name || ' ' || vorname || ' ' || telefonnumer like '%Müller%'
|
Re: In allen Felder suchen
Zitat:
SQL-Code:
) wird das keinen großen Unterschied machen, aber bei Mustern à la "Müller%" kann ein guter Optimizer einen normalen Index für die Suche verwenden. Und wird es aller Wahrscheinlichkeit auch tun. (Es wird ja nach 'Müller' am Anfang eines Strings gesucht).
LIKE "%Müller%'
Versuche doch, einen Querygenerator zu schreiben, der über alle (Var)Char-Felder deiner Tabelle iteriert und das SELECT entsprechend aufbaut. Oder Du kapselst das in einer Stored Procedure. Versuche, die Tabelle umzuformen, nur um eine 'elegante' Lösung herbeizuführen sind eine schöne Übung für die Normalisierung, taugen in der Praxis jedoch nur selten, da die Eleganz von der mangelnden Performance aufgefressen wird. |
Re: In allen Felder suchen
Schau dir mal für MySQL die Möglichkeiten einer
![]() |
Re: In allen Felder suchen
Zitat:
|
Re: In allen Felder suchen
Das LIKE hebelt alle Indices aus. Das mal vorab. Das nächste wäre einem zuzumuten, zwischen Groß/Kleinschreibung zu unterscheiden. Also kommt notgedrungen noch UPPER ins Spiel. Um das Ganze jetzt etwas einzuschränken, müssen die Felder also genau angesprochen werden. Siehe Omatas Beitrag.
|
Re: In allen Felder suchen
Hallo,
eine weitere Alternative wäre eine zusätzliche Spalte in der Datenbank, in die Du die Inhalte der zu durchsuchenden Spalten in reiner Großschrift ablegst.
SQL-Code:
Beim Speichern der Daten musst Du dann halt (per Trigger?) diese zusätzliche Spalte füllen. Die Spalte muss "breit" genug sein, um die Inhalte der anderen Spalten bei jeweils maximaler Füllung aufnehmen zu können.
SELECT name, vorname, telefonnumer FROM adressen where Sammelspalte like '%Müller%'
|
Re: In allen Felder suchen
Zitat:
Zitat:
|
Re: In allen Felder suchen
Zitat:
|
Re: In allen Felder suchen
Eben, das hat mit dem LIKE ja nur temporär zu tun. Es kommt darauf an, ob das Suchpattern bereits am Anfang eine Wildcard aufweist oder nicht.
|
Re: In allen Felder suchen
Habe mich offensichtlich nicht klar genügt ausgedrückt. 8) Wenn gesucht wird nach %NAME% etc. dann ist ein Index irrelevant. Auf der anderen Seite nützt es kaum was, anders zu suchen, sofern nur wenig bekannt ist. Man muss dann eben mit dem auskommen, was man hat. Ist nur der Namensbestandteil "ller" bekannt, dann nützt die Suche nach "Müller" wohl nichts. Das könnte auch "Schiller" sein usw. Das nächste wäre : ein Anwender muss unterstützt und nicht behindert werden. Selbet wenn eine Minute wegen Performance-Pronlemen gebraucht wird, um einen Datensatz zu suchen, dann ist das immer noch besser, als 10 Min. einen Ordner zu wälzen. :mrgreen:
|
Re: In allen Felder suchen
Mit dem Event OnFilterRecord kann man sehr flexibel nach allen Feldern filtern.
Es geht hier übrigens ums Filtern, nicht ums Suchen. Natürlich werden zuerst alle Datensätze abgerufen; bei einer kleinen Datenmenge ist das aber eleganter und mächtiger als sich mit Where-Bedingungen auseinanderzusetzen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz