Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi "Intelligente" Suche in Datenbank (https://www.delphipraxis.net/28313-intelligente-suche-datenbank.html)

Gambit 23. Aug 2004 08:56


"Intelligente" Suche in Datenbank
 
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

lume96 23. Aug 2004 09:25

Re: "Intelligente" Suche in Datenbank
 
Hallo,
Zitat:

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.

Gambit 23. Aug 2004 09:44

Re: "Intelligente" Suche in Datenbank
 
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

lume96 23. Aug 2004 10:03

Re: "Intelligente" Suche in Datenbank
 
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

Gambit 23. Aug 2004 11:20

Re: "Intelligente" Suche in Datenbank
 
Zitat:

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:

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:

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:

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

franktron 23. Aug 2004 11:44

Re: "Intelligente" Suche in Datenbank
 
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.

Gambit 23. Aug 2004 12:06

Re: "Intelligente" Suche in Datenbank
 
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

franktron 23. Aug 2004 12:09

Re: "Intelligente" Suche in Datenbank
 
Zitat:

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 :twisted:

Gambit 23. Aug 2004 12:19

Re: "Intelligente" Suche in Datenbank
 
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

franktron 23. Aug 2004 12:25

Re: "Intelligente" Suche in Datenbank
 
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. :?:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:22 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