AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Problem bei Verketteter Abfrage
Thema durchsuchen
Ansicht
Themen-Optionen

Problem bei Verketteter Abfrage

Offene Frage von "Teekeks"
Ein Thema von Teekeks · begonnen am 19. Dez 2009 · letzter Beitrag vom 29. Dez 2009
Antwort Antwort
Seite 1 von 2  1 2      
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#1

Problem bei Verketteter Abfrage

  Alt 19. Dez 2009, 09:41
Datenbank: MySQL • Version: 5.0 • Zugriff über: ??
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
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Problem bei Verketteter Abfrage

  Alt 19. Dez 2009, 10:35
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 ...)
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Problem bei Verketteter Abfrage

  Alt 19. Dez 2009, 15:31
Ahhh, dazu benötigt man also join's...
Die hab ich noch nie so richtig kappiert ^^
Ich probiers mal so...
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Problem bei Verketteter Abfrage

  Alt 19. Dez 2009, 16:13
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
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#5

Re: Problem bei Verketteter Abfrage

  Alt 19. Dez 2009, 16:16
Du musst die Aliase schon verwenden - also statt "Ausleihvorgang.Ausgeliehen" halt "a.Ausgeliehen" , statt "Buecher.Name" dann "b.Name" usw.
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Problem bei Verketteter Abfrage

  Alt 19. Dez 2009, 16:36
Auch schon bevor ich diese Definiere?
Aha, gut.

DANKE
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Problem bei Verketteter Abfrage

  Alt 19. Dez 2009, 16:48
Hmmm, nun bekomme ich den Fehler
Zitat:
Unknow column 'a.NutzerNR' in 'on clause'
Worann könnte das liegen? richtig geschrieben ist es eigendlich...
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Problem bei Verketteter Abfrage

  Alt 22. Dez 2009, 14:47
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
Heiko
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Problem bei Verketteter Abfrage

  Alt 23. Dez 2009, 13:02
Und was ändert diese Reihenfolge jetzt daran?
Auch so bekomme ich das richtige Ergebnis...

Gruß Teekeks
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Problem bei Verketteter Abfrage

  Alt 27. Dez 2009, 19:55
Hallo,

jo, aber nur weil das hier noch stehen hast

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
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:41 Uhr.
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