AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

In allen Felder suchen

Ein Thema von Luckie · begonnen am 20. Okt 2009 · letzter Beitrag vom 21. Okt 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

In allen Felder suchen

  Alt 20. Okt 2009, 02:09
Datenbank: MySQL • Zugriff über: PHP
Hallo,
ich bräuchte noch mal eure Hilfe. Also wie man nach einem oder mehrern Feldern filtert, weiß ich.
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: In allen Felder suchen

  Alt 20. Okt 2009, 02:11
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%'
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: In allen Felder suchen

  Alt 20. Okt 2009, 02:20
Ja, gut. Aber gibt es da keine elegantere Lösung?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#4

Re: In allen Felder suchen

  Alt 20. Okt 2009, 06:23
Ein bißchen eleganter ists imho so (verkürzt das Statement ein wenig):
SELECT name, vorname, telefonnumer FROM adressen where name || ' ' || vorname || ' ' || telefonnumer like '%Müller%' Ist aber Geschmackssache.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: In allen Felder suchen

  Alt 20. Okt 2009, 07:01
Zitat von chaosben:
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 (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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: In allen Felder suchen

  Alt 20. Okt 2009, 07:51
Schau dir mal für MySQL die Möglichkeiten einer Volltextsuche an.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
schlecki

Registriert seit: 11. Apr 2005
Ort: Darmstadt
148 Beiträge
 
Delphi XE2 Enterprise
 
#7

Re: In allen Felder suchen

  Alt 20. Okt 2009, 09:25
Zitat von chaosben:
Ein bißchen eleganter ists imho so (verkürzt das Statement ein wenig):
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...
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: In allen Felder suchen

  Alt 20. Okt 2009, 10:20
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.
Gruß
Hansa
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

Re: In allen Felder suchen

  Alt 20. Okt 2009, 18:17
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.

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.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#10

Re: In allen Felder suchen

  Alt 20. Okt 2009, 19:08
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)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:43 Uhr.
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