Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   In allen Felder suchen (https://www.delphipraxis.net/141977-allen-felder-suchen.html)

Luckie 20. Okt 2009 01:09

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:
SELECT name, vorname, telefonnumer FROM adressen where name='Müller'
Aber wie sieht die Abfrage aus, um in allen Feldern nach Müller zu suchen?

omata 20. Okt 2009 01:11

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%'

Luckie 20. Okt 2009 01:20

Re: In allen Felder suchen
 
Ja, gut. Aber gibt es da keine elegantere Lösung?

chaosben 20. Okt 2009 05:23

Re: In allen Felder suchen
 
Ein bißchen eleganter ists imho so (verkürzt das Statement ein wenig):
SQL-Code:
SELECT name, vorname, telefonnumer FROM adressen where name || ' ' || vorname || ' ' || telefonnumer like '%Müller%'
Ist aber Geschmackssache. :)

alzaimar 20. Okt 2009 06:01

Re: In allen Felder suchen
 
Zitat:

Zitat von chaosben
SQL-Code:
SELECT name, vorname, telefonnumer FROM adressen where name || ' ' || vorname || ' ' || telefonnumer like '%Müller%'
Ist aber Geschmackssache. :)

Eher eine Frage der Performance. Während bei der Suche per LIKE über ein Feld eventuell ein Index verwendet werden kann, ist dies bei der 'Geschmackssache' unmöglich. In diesem Beispiel (
SQL-Code:
LIKE "%Müller%'
) 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).

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.

Bernhard Geyer 20. Okt 2009 06:51

Re: In allen Felder suchen
 
Schau dir mal für MySQL die Möglichkeiten einer Volltextsuche an.

schlecki 20. Okt 2009 08:25

Re: In allen Felder suchen
 
Zitat:

Zitat von chaosben
Ein bißchen eleganter ists imho so (verkürzt das Statement ein wenig):
SQL-Code:
SELECT name, vorname, telefonnumer FROM adressen where name || ' ' || vorname || ' ' || telefonnumer like '%Müller%'
Ist aber Geschmackssache. :)

Ein Problem bekommst du auch, wenn eines der Felder NULL ist... Dann ist nämlich der komplette Ausdruck auch NULL...

Hansa 20. Okt 2009 09:20

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.

nahpets 20. Okt 2009 17:17

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:
SELECT name, vorname, telefonnumer FROM adressen where Sammelspalte like '%Müller%'
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.

jfheins 20. Okt 2009 18:08

Re: In allen Felder suchen
 
Zitat:

Zitat von Bernhard Geyer
Schau dir mal für MySQL die Möglichkeiten einer Volltextsuche an.

Der Pferdefuß ist aber schon im 3. Satz zu finden:
Zitat:

MySQL unterstützt die Volltextindizierung und -suche. Ein Volltextindex ist in MySQL ein Index des Typs FULLTEXT. FULLTEXT-Indizes können nur bei MyISAM-Tabellen eingesetzt werden.
man muss sich also zwischen Transaktionen (InnoDB) und Volltextsuche (MyIsam) entscheiden. (Gibt bestimmt noch andere Vor- und Nachteile, aber das sind die beiden Funktionalitätsunterschiede über dich ich schon gestolpert bin)


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:21 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz