![]() |
"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 |
Re: "Intelligente" Suche in Datenbank
Hallo,
Zitat:
SQL-Code:
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.
/* Kommentar */
select Titel from DatenBank2 where Titel like 'Arielle%' 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. |
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 |
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 |
Re: "Intelligente" Suche in Datenbank
Zitat:
Zitat:
Zitat:
Zitat:
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 |
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. |
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 |
Re: "Intelligente" Suche in Datenbank
Zitat:
|
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 |
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. :?:
|
Re: "Intelligente" Suche in Datenbank
Ich will sie aber nicht anzeigen sondern etwas damit tun.
Mit:
Delphi-Quellcode:
bekomme ich nur den ersten Datensatz der gefundenen Datensätze. Wie bekomme ich bei 3 gefundenen Datensätzen den zweiten und dritten Datensatz zu fassen?
s:= Query.FieldByName('Titel').AsString;
Einfacher kann ichs nicht erklären... Gambit |
Re: "Intelligente" Suche in Datenbank
Aha, query.next bezieht sich auch auf RecordSets, darüber hatte ich noch nicht nachgedacht...
|
Re: "Intelligente" Suche in Datenbank
Hi,
wenn ich dich jetzt richtig vertehe ist die Lösung wahrscheinlich gar nicht so schwer.
SQL-Code:
Hoffe das hilft dir weiter!
$result = mysql_query("SELECT * FROM table2 WHHERE Titel LIKE 'Arielle%'");
while($data = mysql_fetch_array($result)) { /* die schleife wird jetzt so oft durchlaufen bis kein ergebnis mehr gefunden wird */ /* du kannst also deine Überprüfungen mit $data[titel] durchführen und gleich bei einem Trefffer die restlichen Infos aus $data eintragen */ } mfg Niels |
Re: "Intelligente" Suche in Datenbank
Hmm, liest sich ja erstmal ganz gut...ich verstehe nur am Source nicht so ganz diese Dollarsymbole, sind das nicht Compilerdirektiven? So direkt übernehmen kann ich den Code doch wohl nicht, oder?
Gambit |
Re: "Intelligente" Suche in Datenbank
Zitat:
|
Re: "Intelligente" Suche in Datenbank
achso, die Delphi Variante sollte dann wohl etwas anders aussehen. Hatte mich schon arg gewundert...
Gambit |
Re: "Intelligente" Suche in Datenbank
Tschuldigung, da haben wir wohl aneinander vorbei geredet.
Ich hatte nicht kappiert, dass Dein Problem beim einlesen der verschiedenen Ergebnisse liegt. Da solltest Du doch mit Query.Next; (wie Du selbst schon geschrieben hast) gut weiterkommen. In etwa so
Delphi-Quellcode:
Query.First; //erste Datensatz aus Query
recfound := false; //von Dir angelegter Boolean repeat s:= Query.FieldByName('Titel').AsString; if TestObRichtigeString(s) then recfound := true else Query.Next; until (Query.EOF) or Recfound; Zitat:
MfG Lutz |
Re: "Intelligente" Suche in Datenbank
Naja, ich hatte mich auch nicht sehr glücklich ausgedrückt...deine Lösung würde wohl funzen.
Ich hatte jetzt folgende überlegt:
Delphi-Quellcode:
was ja das Gleiche in Grün ist. Ich hatte die ganze Zeit einfach nicht bedacht, dass sich Query.EOF oder Query.Next natürlich auch auf RecordSets anwenden lassen und nicht nur auf Tabellen.
while not (Query1.EOF) or titlefound do
begin ... zQuery1.Next; end; Jetzt weiß ich zumindest, wie ich vorgehen kann. Ein weiteres wäre jetzt noch zu überlegen, den Suchstring in einzelne Wörter zu zerlegen und dann zu gucken, ob die Wörter in dem Titel von Tabelle 2 enthalten sind, egal in welcher Reihenfolge. Das könnte man vielleicht recursiv lösen? Aber das ist wohl was für einen neuen Thread... Besten Dank und Gruß Gambit |
Re: "Intelligente" Suche in Datenbank
Zitat:
War wahrscheinlich noch etwas früh (war grad aufgestanden :mrgreen: ). Naja da hab ich irgendwie gar nicht an Delphi gedacht und das in php geschrieben. Aber jetzt ist dein Problem ja gelöst :wink: mfg Niels |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:29 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