![]() |
AW: bin am verzweifeln... select abfragen miteinander kombinieren???
Zitat:
Delphi-Quellcode:
und jedes mal ein eigenes SQL-Statement basteln mit veränderten Tabellen und veränderter Where-Bedingung...
if cb1.Checked and not cb2.Checked and not cb3.Checken then...
if not cb1.Checked and cb2.Checked and not cb3.Checken then... if not cb1.Checked and not cb2.Checked and cb3.Checken then... if cb1.Checked and cb2.Checked and not cb3.Checken then... if cb1.Checked and not cb2.Checked and cb3.Checken then... if not cb1.Checked and cb2.Checked and cb3.Checken then... if cb1.Checked and cb2.Checked and cb3.Checken then... |
AW: bin am verzweifeln... select abfragen miteinander kombinieren???
Genau, lass die WHERE-Klausel voerst ganz weg, JOINe alle benötigten Tabellen der Reihe nach zusammen und kontrolliere das Ergebnis (das sich nicht ändern sollte). Danach baust Du Dir dynamisch Deinen Filter zusammen und bist fertig.
[edit] @Jumpy: schau nochmal auf der ersten Seite nach, da wurde auch nur die WHERE-Klausel zusammengesetzt. Das einzige Schwierige dabei ist, dass sie halt mit WHERE beginnen muss und danach dann nur noch ORs folgen. Aber das bekommt man mit der in meinem Beispiel verwendeten Boolean-Variable ja in den Griff. [/edit] |
AW: bin am verzweifeln... select abfragen miteinander kombinieren???
so es hat endlich funktioniert. hab auch ein bisl dynamik schon reingebaut. dank dir für deine geduld. das mit dem left join das hätte mir gestern mal jemand sagen müssen...
Delphi-Quellcode:
procedure anzeigen(befehl: String);
begin dm.dsetbilder.Close; dm.dsetbilder.SelectSQL.Clear; if befehl = 'alleanzeigen' then begin dm.dsetbilder.SelectSQL.Add('select * from bilder b order '+ 'by upper(b.name)'); end else begin dm.dsetbilder.SelectSQL.Clear; dm.dsetbilder.SelectSQL.Add('select b.* from bilder b left join '+ 'zwbildertags x on x.bildid=b.bid left join tags t '+ 'on t.tid=x.tagid left join '+ 'zwbilderprogramme z on z.bildid=b.bid left join programme p '+ 'on p.pid=z.programmid '); // nur bild if frmhaupt.CheckBox1.Checked and not frmhaupt.CheckBox2.Checked and not frmhaupt.CheckBox3.Checked then dm.dsetbilder.SelectSQL.Add('where b.name containing upper(:WERT) '); // nur programm if not frmhaupt.CheckBox1.Checked and frmhaupt.CheckBox2.Checked and not frmhaupt.CheckBox3.Checked then dm.dsetbilder.SelectSQL.Add('where Upper(p.namep) containing UPPER(:WERT)'); // nur tag if not frmhaupt.CheckBox1.Checked and not frmhaupt.CheckBox2.Checked and frmhaupt.CheckBox3.Checked then dm.dsetbilder.SelectSQL.Add('where Upper(t.namet) containing UPPER(:WERT)'); // bild und programm if frmhaupt.CheckBox1.Checked and frmhaupt.CheckBox2.Checked and not frmhaupt.CheckBox3.Checked then dm.dsetbilder.SelectSQL.Add('where (p.namep containing UPPER(:WERT) '+ 'or b.name containing upper(:WERT)) order by upper(b.name)'); // bild und tag if frmhaupt.CheckBox1.Checked and not frmhaupt.CheckBox2.Checked and frmhaupt.CheckBox3.Checked then dm.dsetbilder.SelectSQL.Add('where (t.namet containing UPPER(:WERT) '+ 'or b.name containing upper(:WERT)) order by upper(b.name)'); // programm und tag if not frmhaupt.CheckBox1.Checked and frmhaupt.CheckBox2.Checked and frmhaupt.CheckBox3.Checked then dm.dsetbilder.SelectSQL.Add('where (t.namet containing UPPER(:WERT) or '+ 'p.namep containing UPPER(:WERT)) order by upper(b.name)'); // alle 3 zusammen if frmhaupt.CheckBox1.Checked and frmhaupt.CheckBox2.Checked and frmhaupt.CheckBox3.Checked then dm.dsetbilder.SelectSQL.Add('where (t.namet containing UPPER(:WERT) or '+ 'p.namep containing UPPER(:WERT) or b.name containing upper(:WERT)) '+ 'order by upper(b.name)'); dm.dsetbilder.ParamByName('WERT').AsString := befehl; end; dm.dsetbilder.Open; if dm.dsetbilder.IsEmpty then showmessage('Keine Icons gefunden'); end; |
AW: bin am verzweifeln... select abfragen miteinander kombinieren???
Zitat:
|
AW: bin am verzweifeln... select abfragen miteinander kombinieren???
war halt eher ein kommunikationsproblem...
aber jetzt wo ich das mit den joins richtig verstanden habe kann ich mein programm auch um einige datasets erleichtern :) war ne schwere geburt aber hat sich gelohnt... danke nochmal an alle die so fleißig mitgeraten haben :D |
AW: bin am verzweifeln... select abfragen miteinander kombinieren???
Um sehr mehr Tabellen gejoint werden, um so übersichtlicher werden explitite Joins ( im Vergleich zu der impliziten Variante). Zudem man nur bei Oracle implizit outerjoinen kann (+); möglichweise können das auch andere DBMS, ist aber kein Standard.
|
AW: bin am verzweifeln... select abfragen miteinander kombinieren???
so jetzt hab ich doch noch ein problem. und zwar zeigt er mir seit heute früh für jede verbindung die in der zwischentabelle steht, jeden ds einmal an. also habe ich jetzt teilweise 4 oder bis zu 8 mal die selben bilder untereinander stehen. :( gestern nachmittag war das irgendwie nicht so...
hier meine anzeigen prozedur zum jetzigen zeitpunkt:
Delphi-Quellcode:
procedure anzeigen(befehl: String);
var schon: boolean; begin schon:= false; dm.dsetbilder.Close; dm.dsetbilder.SelectSQL.Clear; dm.dsetbilder.SelectSQL.Add('select * from bilder b left join '+ 'zwbildertags x on x.bildid=b.bid left join tags t '+ 'on t.tid=x.tagid left join '+ 'zwbilderprogramme z on z.bildid=b.bid left join programme p '+ 'on p.pid=z.programmid '); if frmhaupt.CheckBox1.Checked then // bild begin dm.dsetbilder.SelectSQL.Add('where b.name containing upper(:WERT) '); schon:= true; end; if frmhaupt.CheckBox2.Checked then // programm begin if schon then dm.dsetbilder.SelectSQL.Add('or Upper(p.namep) '+ 'containing UPPER(:WERT) ') else dm.dsetbilder.SelectSQL.Add('where Upper(p.namep) '+ 'containing UPPER(:WERT) '); schon:= true; end; if frmhaupt.CheckBox3.Checked then // tag begin if schon then dm.dsetbilder.SelectSQL.Add('or Upper(t.namet) '+ 'containing UPPER(:WERT) ') else dm.dsetbilder.SelectSQL.Add('where Upper(t.namet) '+ 'containing UPPER(:WERT) '); schon:= true; end; if befehl <> 'alleanzeigen' then dm.dsetbilder.ParamByName('WERT').AsString := befehl; dm.dsetbilder.Open; if dm.dsetbilder.IsEmpty then showmessage('Keine Icons gefunden'); end; |
AW: bin am verzweifeln... select abfragen miteinander kombinieren???
Wie sieht denn das resultierende SQL aus?
|
AW: bin am verzweifeln... select abfragen miteinander kombinieren???
Delphi-Quellcode:
ps: wie macht man sql tags?
select * from bilder b left join zwbildertags x on x.bildid=b.bid left join tags t on t.tid=x.tagid left join zwbilderprogramme z on z.bildid=b.bid left join programme p on p.pid=z.programmid
where b.name containing upper(:WERT) |
AW: bin am verzweifeln... select abfragen miteinander kombinieren???
Hat die Tabelle bilder einen Primärschlüssel? SQL-Tags gehen mit [ code=sql ][ /code ] (ohne die Leerzeichen).
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:09 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 by Thomas Breitkreuz