AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi "Intelligente" Suche in Datenbank
Thema durchsuchen
Ansicht
Themen-Optionen

"Intelligente" Suche in Datenbank

Ein Thema von Gambit · begonnen am 23. Aug 2004 · letzter Beitrag vom 23. Aug 2004
Antwort Antwort
Seite 1 von 2  1 2      
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#1

"Intelligente" Suche in Datenbank

  Alt 23. Aug 2004, 08:56
Hallo,

meine Frage kann ich am Besten an einem Beispiel erkären:

Ich habe 2 Datenbanken, in der ersten ist in einem Feld z.B der String "Arielle" enthalten. In der 2. Datenbank steht an einer Stelle "Arielle 2" und an einer weiteren Stelle "Arielle, die kleine Meerjungfrau".

Würde ich jetzt nach dem Titel "Arielle" in der 2. Datenbank mit einem Select-Befehl(...where Titel like 'Arielle%') suchen, würde ich "Arielle 2" finden, weil dieser Titel als erstes in der 2. DB vorkommt. Finden möchte ich aber "Arielle, die kleine Meerjungfrau". Nun könnte ich ja beim ersten Fund nachgucken, ob in der ersten Fundstelle eine 2 vorkommt und dann weitersuchen. Aber wie könnte ich das Weitersuchen bewerkstelligen? Der nachfolgende Select-Befehl müsste sich ja nur auf den Rest, also auf alle Datensätze nach der ersten Fundstelle beziehen.

Geht das überhaupt oder muss man an sowas ganz anders rangehen?

Gruß

Gambit

P.S, es handelt sich um eine MySQL Datenbank
  Mit Zitat antworten Zitat
Benutzerbild von lume96
lume96

Registriert seit: 14. Sep 2003
Ort: Rognac/Marseille - Frankreich
128 Beiträge
 
Delphi 7 Professional
 
#2

Re: "Intelligente" Suche in Datenbank

  Alt 23. Aug 2004, 09:25
Hallo,
Zitat von Gambit:
Hallo,
...
Würde ich jetzt nach dem Titel "Arielle" in der 2. Datenbank mit einem Select-Befehl(...where Titel like 'Arielle%') suchen, würde ich "Arielle 2" finden, weil dieser Titel als erstes in der 2. DB vorkommt. Finden möchte ich aber "Arielle, die kleine Meerjungfrau". Nun könnte ich ja beim ersten Fund nachgucken, ob in der ersten Fundstelle eine 2 vorkommt und dann weitersuchen. Aber wie könnte ich das Weitersuchen bewerkstelligen?
Normalerweise sollte Dir der SQL-Befehl
SQL-Code:
/* Kommentar */
select Titel from DatenBank2
where Titel like 'Arielle%'
sowohl den Record "Arielle 2" als auch den Record "Arielle, die kleine Meerjungfrau" auslesen, nämlich halt alle Records bei denen der Titel mit "Arielle" anfängt. Von daher verstehe ich das "Weitersuchen" nicht.

Vielleicht kannst Du ein bisschen näher beschreiben, was genau Du machen willst ?

MfG
Lutz


PS.: Könnte man bei "SQL-Quotes" nicht das --#1--> rausnehmen. Beim Lesen übersieht man oft die erste Zeile.
Lutz Meyer
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#3

Re: "Intelligente" Suche in Datenbank

  Alt 23. Aug 2004, 09:44
Ja klar, stimmt, er findet natürlich beide...

Also ich möchte weitere Informationen zu dem Titel, die nur in der 2. Datenbank verfügbar sind, dem Titel aus der ersten Datenbank hinzufügen. Dazu würde ich in diesem beschriebenen Fall die Informationen zu "Arielle, die kleine Meerjungfrau" benötigen.
Und da weiß ich nicht so recht, wie ich da ran gehen sollte. Wie gesagt, die 2 aus "Arielle 2" würde mir als Kriterium reichen, um diesen Datensatz als Imformationslieferant auszuschließen.

Gruß

Gambit
  Mit Zitat antworten Zitat
Benutzerbild von lume96
lume96

Registriert seit: 14. Sep 2003
Ort: Rognac/Marseille - Frankreich
128 Beiträge
 
Delphi 7 Professional
 
#4

Re: "Intelligente" Suche in Datenbank

  Alt 23. Aug 2004, 10:03
Vielleicht kannst Du kurz beschreiben, wie Deine Dantebank 1 und Datenbank 2 aufgebaut sind und was genau sie enthalten (z.B.: Dantenbank 1 = Liste aller Filme, Datenbank 2 = Zusatzinfos zu den Filmen).

Kannst Du die Strukturen der Datenbänke verändern oder sind die fest vorgegeben ?

Auf den ersten Blick sieht das hier für mich nach einem "Master-Detail"-schema aus. Sollte das so sein, wäre es auf jeden Fall ratsam, die Relation zwischen Datenbank1 und Datenbank2 durch einen direkten Vergleich Datenbank1.PrimaryKey=Datenbank2.ForeignKey herzustellen.

Selbst wenn Du eine 'Not-Lösung' für "Arielle" findest, funktioniert diese vielleicht nicht mehr für andere Fälle (z.B.: "Star Wars" und "Star Wars: Episode II Attack of the Clones").

MfG
Lutz
Lutz Meyer
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#5

Re: "Intelligente" Suche in Datenbank

  Alt 23. Aug 2004, 11:20
Zitat von lume96:
Vielleicht kannst Du kurz beschreiben, wie Deine Dantebank 1 und Datenbank 2 aufgebaut sind und was genau sie enthalten (z.B.: Dantenbank 1 = Liste aller Filme, Datenbank 2 = Zusatzinfos zu den Filmen).
Datenbank 1 hat nur Filmtitel, allerdings eben nicht vollständig oder ungenau. Datenbank 2 hat Filmtitel und Infos dazu.

Zitat von lume96:
Kannst Du die Strukturen der Datenbänke verändern oder sind die fest vorgegeben ?
Die Struktur kann ich nach Belieben verändern.

Zitat von lume96:
Auf den ersten Blick sieht das hier für mich nach einem "Master-Detail"-schema aus. Sollte das so sein, wäre es auf jeden Fall ratsam, die Relation zwischen Datenbank1 und Datenbank2 durch einen direkten Vergleich Datenbank1.PrimaryKey=Datenbank2.ForeignKey herzustellen.
Ich verstehe jetzt nicht so recht, was mir das bringen könnte.

Zitat von lume96:
Selbst wenn Du eine 'Not-Lösung' für "Arielle" findest, funktioniert diese vielleicht nicht mehr für andere Fälle (z.B.: "Star Wars" und "Star Wars: Episode II Attack of the Clones").
Wieso, wenn ich davon ausgehe, dass StarWars die Episode 4(was am wahrscheinlichsten ist, weil der der erste war) ist, kann ich in dem zweiten Titel über das II den Datensatz ausschließen. Das sind ja nicht so viele Schlüsselwörter, die ich überprüfen müsste(2, II oder zwei) Ich hatte auch vor, bzw. habs schon gemacht, die Titel in den DBs vorher etwas aufzubereiten, indem ich zB. bestimmte Wörter ausschließe wie der, die, das usw. 100%tig wirds wohl nicht gehen aber ich habe im Moment schon eine Trefferquote von ca. 90% Einiges werde ich wohl manuell nacharbeiten müssen, nur bei mehreren Tausen Sätzen, wäre eine Automatisierung schon nicht schlecht.

Aber mal abgesehen davon, wie würde ich denn in dem erst genannten Beispiel Arielle, die kleine Seejungfrau zu packen kriegen, wenn ich mit der Notlösung erstmal zufrieden wäre?

Gruß

Gambit
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6

Re: "Intelligente" Suche in Datenbank

  Alt 23. Aug 2004, 11:44
Also wenn ich den Thread richtig gelesen hab ist das deine lösung.

SQL-Code:
  SELECT *
  FROM tab1 JOIN tab2 ON tab1.nr=tab2.tab1nr

Du musst nur in tab2.tab1nr die nr des PrimaryIndexses (tab1.nr) reinschreiben um so eine Verknüpfung herzustellen.

Anders geht das wohl nicht zumin. nicht vernüftig und schnell.
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#7

Re: "Intelligente" Suche in Datenbank

  Alt 23. Aug 2004, 12:06
Aber dafür müsste ich erstmal die Schlüssel haben. Angenommen ich würde in Tabelle 1 jedem Titel eine Nummer als Primärschlüssel geben, dann müsste ich den Sekundärschlüssel in Tabelle 2 ja praktisch manuell zuordnen(wenns automatisch ginge, hätte ich die Lösung), da wär ich Opa bis ich damit fertig wäre.

Gambit
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

Re: "Intelligente" Suche in Datenbank

  Alt 23. Aug 2004, 12:09
Zitat von Gambit:
Aber dafür müsste ich erstmal die Schlüssel haben. Angenommen ich würde in Tabelle 1 jedem Titel eine Nummer als Primärschlüssel geben, dann müsste ich den Sekundärschlüssel in Tabelle 2 ja praktisch manuell zuordnen(wenns automatisch ginge, hätte ich die Lösung), da wär ich Opa bis ich damit fertig wäre.

Gambit
Das geht wohl nur wenn du eine eindeutige zuordnung hast wenn nicht na dann viel spass beim Tippen
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#9

Re: "Intelligente" Suche in Datenbank

  Alt 23. Aug 2004, 12:19
Ich stells nochmal anders da:
angenommen ich bekomme bei der Suche für einen Titel ein RecordSet von 3 Datensätzen. Dann möchte ich die 3 Datensätze nochmal genauer durchparsen können. Sowas könnte man vielleicht mit einer View machen, das wird aber meines Wissens von MySql noch nicht unterstützt. Mir wäre ja schon geholfen, wenn es mir gelingen würde, die gefundenen Datensätze(im o.g Bsp. also 3) in ein String-Array oder sowas zu speichern, sodass ich sie mir nochmal einzeln vornehmen könnte. Das es keine 100%-tige Lösung gibt ist mir schon klar.

Gruß

Gambit
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#10

Re: "Intelligente" Suche in Datenbank

  Alt 23. Aug 2004, 12:25
Ja und wo liegt da das problem wenn du dein SQL Statement nimmst hast du doch mehrere einträge du musst doch nur noch anzeigen.
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  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 04:49 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