Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Problem bei Verketteter Abfrage (https://www.delphipraxis.net/144902-problem-bei-verketteter-abfrage.html)

Teekeks 19. Dez 2009 08:41

Datenbank: MySQL • Version: 5.0 • Zugriff über: ??

Problem bei Verketteter Abfrage
 
Hallo allerseits.
Ich habe ein Problem...

Ich habe folgende Datenbankstruktur:
Zitat:

Buecher
-----------------------
Nummer [bigint] (vortlaufende Nummer)
Ausgabe [varchar] (Ausgabe des Buches)
ISBN [varchar] (Die ISBN Nummer des Buches)
Soundex [varchar] (für die suche nach Klang des Namens des Autors)
Eintragedatum [date] (Das Datum an dem das Buch eigetragen wurde)
Erscheinungsjahr [varchar] (Das Datum an dem das Buch erschienen ist)
Verlag [varchar] (der Verlag des Buches)
Ausgeliehen [int] (ob das Buch ausgeliehen ist oder nicht [1..2] )
Farbe_des_Buchrueckens [varchar] (die Farbe des Buchrückens mit einer Zahl)
Regal [varchar] (Der Regalstandort in der Bibo (z.B. Y 474 4775))
Autor [varchar] (der Autor des Buches)
Sachbereich [varchar] (Sachbereich des Buches)
Schlagwoerter [varchar] (Schlagwörter zum Buch)
Name [varchar] (Name des Buches (auch Titel))
Beschreibung [text] (Weitere Beschreibungen des Buches)

Ausleihvorgang
-----------------------
Nummer [bigint] (vortlaufende Nummer)
BuchNR [bigint] (Die ID (Nummer) des ausgeliehenden Buches)
NutzerNR [bigint] (Die ID (Nummer) des Nutzers, welcher d. Buchausgel. hat)
Rueckgabe [date] (Das Rückgabedatum)
Ausgeliehen [date] (Das datum an welchem das Buch ausgeliehen wurde)
Aktiv [tinyint] (1=nicht zurückgegeben 0=zurückgegeben)

Nutzer
-----------------------
Nummer [bigint] (vortlaufende Nummer)
Name [varchar] (Name des Nutzers)
Vorname [varchar] (Vorname des Nutzers)
PLZ [varchar] (Postleitzahl des Nutzers)
Wohnort [varchar] (Wohnort des Nutzers)
Strasse [varchar] (Strasse des Nutzers)
Typ [varchar] (ob Schüler,Lehrer,Eltern oder Extern)
(gekürtzte fassung)

Nun möchte ich per SELECT alle Felder von Ausleihvorgang haben bei denen das Datum von Ausgeliehen länger als 5 Tage zurück liegt und bei denen Aktiv=1 ist.

Weiter möchte ich den entsprechenden Datensatz von Buecher haben,dessen Nummer in BuchNR steht.
Und das selbe möchte ich gerne zu Nutzer über NutzerNR machen.

Aber ich kriege das ganze irgendwie nicht richtig hin.
Kann mir da jemand helfen?

Gruß Teekeks

jfheins 19. Dez 2009 09:35

Re: Problem bei Verketteter Abfrage
 
Wie wär's mit sowas:
SQL-Code:
select
*
from
Ausleihvorgang a
join Nutzer n on n.Nummer = a.NutzerNR
join Buecher b on b.Nummer = a.BuchNR
where
date_add(a.Ausgeliehen, interval 5 day) < now()
and a.Aktiv = 1
(ungetestet, wäre aber jetzt so ungefähr das, was ich gemacht hätte ...)

Teekeks 19. Dez 2009 14:31

Re: Problem bei Verketteter Abfrage
 
Ahhh, dazu benötigt man also join's...
Die hab ich noch nie so richtig kappiert ^^
Ich probiers mal so...

Teekeks 19. Dez 2009 15:13

Re: Problem bei Verketteter Abfrage
 
Hmmm, ich hab das ganze ein bischen abgewangelt:
SQL-Code:
select
DATE_FORMAT(Ausleihvorgang.Ausgeliehen, ''%d.%m.%Y'') as ASeit, Buecher.Name as BName, Buecher.Autor as BAutor, Nutzer.Name as NName,
Nutzer.Vorname as NVorname, Nutzer.Typ as NTyp,
DAY(FROM_UNIXTIME(UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(Ausleihvorgang.Ausgeliehen))) as Dif
from
Ausleihvorgang a, Buecher b, Nutzer n
join Nutzer on n.Nummer = a.NutzerNR
join Buecher on b.Nummer = a.BuchNR
where
date_add(a.Ausgeliehen, interval 5 day) < now()
and a.Aktiv = 1
Nun sagt der mir aber das er kein "Ausheihvorgang.Ausgeliehen" in seiner Feldliste Findet...
Was mache ich da falsch?

Gruß Teekeks

jfheins 19. Dez 2009 15:16

Re: Problem bei Verketteter Abfrage
 
Du musst die Aliase schon verwenden - also statt "Ausleihvorgang.Ausgeliehen" halt "a.Ausgeliehen" , statt "Buecher.Name" dann "b.Name" usw. ;)

Teekeks 19. Dez 2009 15:36

Re: Problem bei Verketteter Abfrage
 
Auch schon bevor ich diese Definiere?
Aha, gut.

DANKE

Teekeks 19. Dez 2009 15:48

Re: Problem bei Verketteter Abfrage
 
Hmmm, nun bekomme ich den Fehler
Zitat:

Unknow column 'a.NutzerNR' in 'on clause'
Worann könnte das liegen? richtig geschrieben ist es eigendlich...

hoika 22. Dez 2009 13:47

Re: Problem bei Verketteter Abfrage
 
Hallo,

Zitat:

Auch schon bevor ich diese Definiere?
Der SQL-Server arbeitet das SQL-Statement
nicht in der Reihenfolge ab, wie es geschrieben wrd.

Ausserdem ist dein join falsch.

dein Code

SQL-Code:
from
Ausleihvorgang a, Buecher b, Nutzer n
join Nutzer on n.Nummer = a.NutzerNR
join Buecher on b.Nummer = a.BuchNR
so sollte es aber sein
(die geänderte Join-Reihgenfolge beachten

SQL-Code:
from
Ausleihvorgang a
join Buecher on b.Nummer = a.BuchNR
join Nutzer on n.Nummer = a.NutzerNR


Heiko

Teekeks 23. Dez 2009 12:02

Re: Problem bei Verketteter Abfrage
 
Und was ändert diese Reihenfolge jetzt daran?
Auch so bekomme ich das richtige Ergebnis...

Gruß Teekeks

hoika 27. Dez 2009 18:55

Re: Problem bei Verketteter Abfrage
 
Hallo,

jo, aber nur weil das hier noch stehen hast

SQL-Code:
Ausleihvorgang a, Buecher b, Nutzer n
Das ist aber unnötig
und ohne die folgenden joins wäre das ein kartesisches Produkt
über 3 komplette Tabellen.

Es sieht so aus, als ober der SQL-Server
das selber erkennt und "optimiert".


Heiko


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