AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MySQL anfrage erstellen.
Thema durchsuchen
Ansicht
Themen-Optionen

MySQL anfrage erstellen.

Ein Thema von shifter · begonnen am 29. Okt 2008 · letzter Beitrag vom 29. Okt 2008
Antwort Antwort
shifter

Registriert seit: 2. Jan 2005
175 Beiträge
 
Delphi 2007 Enterprise
 
#1

MySQL anfrage erstellen.

  Alt 29. Okt 2008, 06:06
Datenbank: MySQL • Zugriff über: zeos lib
Hallo zusammen,

habe folgende scenario.

TABELLE 1
Ist ne personal samlung wie z.b.

PersonalNr, Name, Vorname ...

TABELLE 2
Ist Abwesenheits liste ( Urloub, Dienstreise, Krank ... )
PersonalNr, Datum_von, Datum_bis ...



Versuche jezt anfrage erstellen die mir auflistet Mitarbeiter die am Datum zur verfügung stehen.
Er solle alle Leute auflisten die nicht Krank, Urlaub etc. sind.


Habe versucht mit

SELECT a.*, b.Pnr, b.Datum_von, b.Datum_bis FROM (personal a) LEFT JOIN abw_liste b ON (a.pnr=b.pnr) WHERE b.datum_von<="2008-11-02" AND b.datum_bis>="2008-10-27" ...


Leider komm ich nicht zur gewünschten ergebnis.
Er listet mir entweder die leute auf die nicht dar sind oder garnichts.


Kann mir jemand helfen ?

mfg
shifter
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: MySQL anfrage erstellen.

  Alt 29. Okt 2008, 07:23
Datum_von muss doch kleiner sein als Datum_bis, oder nicht? Versuch es mal so:
SQL-Code:
SELECT P.*
FROM Personal P
LEFT JOIN Abwesenheit A ON A.PersonalNr = P.PersonalNr
                        AND A.Datum_von >= '2008-11-02
                        AND A.Datum_bis <= '2008-11-05'
WHERE A.PersonalNr IS NULL
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Xong
Xong

Registriert seit: 9. Jan 2008
186 Beiträge
 
Delphi 2006 Professional
 
#3

Re: MySQL anfrage erstellen.

  Alt 29. Okt 2008, 08:26
Ich bin mir nicht sicher, aber DeddyHs Vorschlag müsste falsch sein.
Bei einem Fehlzeitraum 2008-11-03 bis 2008-11-07 ergibt sich aus
SQL-Code:
A.Datum_von >= '2008-11-02'
AND A.Datum_bis <= '2008-11-05'
SQL-Code:
TRUE
AND FALSE
= FALSE
Damit wäre beim LEFT OUTER JOIN A.PersonalNr = NULL.
Der Mitarbeiter würde also selektiert werden, obwohl er nicht einsetzbar wäre.

Vorgehensweise:
Code:
Gib mir alle Spalten
aus Tabelle Personal
wo PersonalNr nicht in
    ( Gib mir alle PersonalNr
      aus Abwesenheitsliste
      wo Einsatzzeitraum in Fehlzeitraum fällt
    )
Mein Vorschlag:
SQL-Code:
SELECT P.*
FROM Personal P
WHERE P.PersonalNr != ALL (
    SELECT PersonalNr
    FROM abw_liste
    WHERE ( datum_von>=VON_WANN AND datum_von<=BIS_WANN ) OR
          ( datum_bis>=VON_WANN AND datum_bis<=BIS_WANN )
)
Übrigens solltest du Projektionen immer ausschreiben, also nicht den *-Operator nutzen.

LG,
Xong

PS: Ich hoffe, ich habe keine Fehler gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: MySQL anfrage erstellen.

  Alt 29. Okt 2008, 08:35
OK, an Überlappung hab ich nicht gedacht. Dann mal anders formuliert (irgendein Vorschlag wird dann ja mal hoffentlich der richtige sein):
SQL-Code:
SELECT P.*
FROM Personal P
LEFT JOIN Abwesenheit A ON A.PersonalNr = P.PersonalNr
                        AND (
                             A.Datum_von BETWEEN '2008-11-02AND '2008-11-05'
                          OR A.Datum_bis BETWEEN '2008-11-02AND '2008-11-05
                          OR (A.Datum_von <= '2008-11-02AND A.Datum_bis >= '2008-11-05')
                            )
WHERE A.PersonalNr IS NULL
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Xong
Xong

Registriert seit: 9. Jan 2008
186 Beiträge
 
Delphi 2006 Professional
 
#5

Re: MySQL anfrage erstellen.

  Alt 29. Okt 2008, 08:41
Zitat von DeddyH:
OK, an Überlappung hab ich nicht gedacht. Dann mal anders formuliert (irgendein Vorschlag wird dann ja mal hoffentlich der richtige sein):


Zitat von DeddyH:
SQL-Code:
SELECT P.*
FROM Personal P
LEFT JOIN Abwesenheit A ON A.PersonalNr = P.PersonalNr
                        AND (
                             A.Datum_von BETWEEN '2008-11-02AND '2008-11-05'
                          OR A.Datum_bis BETWEEN '2008-11-02AND '2008-11-05
                          OR (A.Datum_von <= '2008-11-02AND A.Datum_bis >= '2008-11-05')
                            )
WHERE A.PersonalNr IS NULL
Ich habe jetzt keine Möglichkeit, die Abfrage zu testen, aber muss ich in die Projektionsliste nicht auch noch A.PersonalNr aufnehmen, damit ich in der WHERE-Klausel darauf zugreifen kann?
Weiß nicht, wie MySQL damit umgeht...

LG,
Xong
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: MySQL anfrage erstellen.

  Alt 29. Okt 2008, 08:43
Nö, wieso? Hab auch zur Kontrolle nochmal hier nachgesehen: http://www.sql-tips.de/mediawiki/ind...von_Subselects
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Xong
Xong

Registriert seit: 9. Jan 2008
186 Beiträge
 
Delphi 2006 Professional
 
#7

Re: MySQL anfrage erstellen.

  Alt 29. Okt 2008, 08:46
Zitat von DeddyH:
Nö, wieso? Hab auch zur Kontrolle nochmal hier nachgesehen: http://www.sql-tips.de/mediawiki/ind...von_Subselects
Ja, hast recht. Hab mich kurz verwirren lassen...
  Mit Zitat antworten Zitat
shifter

Registriert seit: 2. Jan 2005
175 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: MySQL anfrage erstellen.

  Alt 29. Okt 2008, 13:11
Hi leute ,
bin gerade aus dem bett rausgekrochen

Danke erstmal für eure Hilfe.

@DeddyH : Versuche dein Code durchzutesten, jedoch irgend wo befindet sich noch ein hacken.
Dazu aber gleich mehr.

gruss
shifter
  Mit Zitat antworten Zitat
shifter

Registriert seit: 2. Jan 2005
175 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: MySQL anfrage erstellen.

  Alt 29. Okt 2008, 13:18
Hi,

von wegen ein Hacken.

ES FUNKTIONIERT 100%-ig.

Danke Sehr für eure Mühe und Hilfe.

MfG
Sebastian Launer
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:48 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