Delphi-PRAXiS
Seite 4 von 8   « Erste     234 56     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi bin am verzweifeln... select abfragen miteinander kombinieren??? (https://www.delphipraxis.net/161073-bin-am-verzweifeln-select-abfragen-miteinander-kombinieren.html)

Serienchiller 16. Jun 2011 11:56

AW: bin am verzweifeln... select abfragen miteinander kombinieren???
 
@deddyh

du hast es richtig verstanden. man sucht aber immer nach bildern, nie direkt nach programmen oder tags, sondern nur nach bildern, die über zwischentabellen mit den programmen/tags, die den suchbegriff enthalten, verbunden sind.

habe jetzt etwas anderes probiert. ist zwar erstmal statisch aber habe erstmalig keinen sql fehler(!!!!) erhalten.:

Delphi-Quellcode:
if frmhaupt.CheckBox1.Checked and frmhaupt.CheckBox2.Checked and
      not frmhaupt.CheckBox3.Checked then
      dm.dsetbilder.SelectSQL.Add('select * from zwbilderprogramme z, '+
        'bilder b, programme p '+
        'where b.bid=z.bildid and p.pid=z.programmid ' +
        'and p.namep containing UPPER(:WERT) or b.name '+
        'containing upper(:WERT)');
das einzige problem dabei ist, dass ich nun die datensätze doppelt und dreifach sehe, wollte das mit distinct b.name lösen, aber das programm braucht ja auch die ganzen anderen felder aus der tabelle bilder.

p80286 16. Jun 2011 13:28

AW: bin am verzweifeln... select abfragen miteinander kombinieren???
 
Zitat:

Zitat von Serienchiller (Beitrag 1106711)
Delphi-Quellcode:
if frmhaupt.CheckBox1.Checked and frmhaupt.CheckBox2.Checked and
      not frmhaupt.CheckBox3.Checked then
      dm.dsetbilder.SelectSQL.Add('select * from zwbilderprogramme z, '+
        'bilder b, programme p '+
        'where b.bid=z.bildid and p.pid=z.programmid ' +
        'and p.namep containing UPPER(:WERT) or b.name '+
        'containing upper(:WERT)');

ich denke so ist es besser ("or" klammern):
Code:
'where b.bid=z.bildid and p.pid=z.programmid ' +
'and (p.namep containing UPPER(:WERT) or b.name '+
'containing upper(:WERT)'));
Gruß
K-H

Serienchiller 16. Jun 2011 13:36

AW: bin am verzweifeln... select abfragen miteinander kombinieren???
 
super es funktioniert!!! dank der klammer! danke danke danke

endlich bin ich einen schritt weiter...
Delphi-Quellcode:

if frmhaupt.CheckBox1.Checked and frmhaupt.CheckBox2.Checked and
      not frmhaupt.CheckBox3.Checked then
      dm.dsetbilder.SelectSQL.Add('select * from zwbilderprogramme z, '+
        'bilder b, programme p '+
        'where b.bid=z.bildid and p.pid=z.programmid ' +
        'and (p.namep containing UPPER(:WERT) or b.name '+
        'containing upper(:WERT)) order by upper(b.name)');
nun muss ich nur noch die anderen abfragen miteinander verbinden, mal schauen ob ich das hinkriege

DeddyH 16. Jun 2011 13:36

AW: bin am verzweifeln... select abfragen miteinander kombinieren???
 
Korrekt, AND hat eine stärkere Bindung als OR.

Serienchiller 16. Jun 2011 14:08

AW: bin am verzweifeln... select abfragen miteinander kombinieren???
 
so habe mein neu erworbenes wissen jetzt versucht auf die anderen kombinationsmöglichkeiten zu übertragen, was schon teilweise funktionierte. leider gab er mir diesmal nur eine handvoll datensätze aus und ignorierte alle anderen... aber immerhin gabs keinen sql fehler :)

Delphi-Quellcode:

// wenn nach bild und tag gesucht wird

    if frmhaupt.CheckBox1.Checked and not frmhaupt.CheckBox2.Checked and
      frmhaupt.CheckBox3.Checked then
      dm.dsetbilder.SelectSQL.Add('select * from zwbildertags x, '+
        'bilder b, tags t '+
        'where b.bid=x.bildid and t.tid=x.tagid ' +
        'and (t.namet containing UPPER(:WERT) or b.name '+
        'containing upper(:WERT)) order by upper(b.name)');

// wenn nach programm und tag gesucht wird

    if not frmhaupt.CheckBox1.Checked and frmhaupt.CheckBox2.Checked and
      frmhaupt.CheckBox3.Checked then
      dm.dsetbilder.SelectSQL.Add('select * from zwbilderprogramme z, '+
        'bilder b, programme p,zwbildertags x, tags t '+
        'where b.bid=z.bildid and p.pid=z.programmid ' +
        'and b.bid=x.bildid and t.tid=x.tagid '+
        'and (p.namep containing UPPER(:WERT) or t.namet '+
        'containing upper(:WERT)) order by upper(b.name)');
habe die lösung: ich habe nur 2 ds, die überhaupt mit einem tag verknüpft sind also zeigt es nur 2 an. ich würde aber gerne auch die anzeigen lassen, wo garkein tag verlinkt ist...

DeddyH 16. Jun 2011 14:25

AW: bin am verzweifeln... select abfragen miteinander kombinieren???
 
Im Moment machst Du einen INNER JOIN über 3 Tabellen, das bedeutet, dass Du nur DS gelistet bekommst, die über alle Tabellen verknüpft sind. Was Du also brauchst, ist ein OUTER JOIN.
SQL-Code:
SELECT
  Feldliste
FROM
  Tabelle1 A
LEFT JOIN --oder auch LEFT OUTER JOIN, ist es aber automatisch
  Tabelle2 B ON B.FK = A.PK
LEFT JOIN --oder auch LEFT OUTER JOIN, ist es aber automatisch
  Tabelle3 C ON C.FK = B.PK
Gibt es in Tabelle2 bzw. Tabelle3 keine entsprechenden DS, haben deren Felder dann durchgängig NULL-Werte.

Serienchiller 16. Jun 2011 14:32

AW: bin am verzweifeln... select abfragen miteinander kombinieren???
 
super danke hab das halt mit der schreibweise mit diesem join noch nicht so ganz verinnerlicht. ich probiers mal...

allerdings hatte ich mit den joins immer sql fehler... mit dieser variante allerdings nicht. ist es evtl. möglich, einen mit dieser variante zu formulieren? z.b. mit or statt and?

DeddyH 16. Jun 2011 14:44

AW: bin am verzweifeln... select abfragen miteinander kombinieren???
 
In der Wikipedia ist das IMO recht gut erklärt.

DeddyH 16. Jun 2011 15:00

AW: bin am verzweifeln... select abfragen miteinander kombinieren???
 
Sry, ich hatte das Edit nicht gesehen. Ja, das geht, das wäre dann Deine Where-Klausel.
SQL-Code:
SELECT
  Feldliste
FROM
  Tabelle1 A
LEFT JOIN
  Tabelle2 B ON B.FK = A.PK --Verknüpfungsbedingung(en)
WHERE
  A.Feld1 = 'Dings' OR B.Feld1 = 'Bums' --Filterbedingung(en)

Serienchiller 16. Jun 2011 15:05

AW: bin am verzweifeln... select abfragen miteinander kombinieren???
 
aber da ist ja wieder das join drin... das muss doch auch ohne das join gehen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:31 Uhr.
Seite 4 von 8   « Erste     234 56     Letzte »    

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