php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 13.06.2011, 10:27  
Benutzer
 
Registriert seit: 10.06.2011
Beiträge: 34
PHP-Kenntnisse:
Anfänger
Marvin75 befindet sich auf einem aufstrebenden Ast
Marvin75 eine Nachricht über ICQ schicken
Standard [Erledigt] Sortieren nach berechnetem Feld in Unterabfrage

Hallo Zusammen,

ich habe einen SQL String, der mir meine Gleitzeit aufaddiert und wenn der aufaddierte Wert <= 25 ist wird ein Datum + 1 Jahr in die Spalte JAZ geschrieben. Soweit funktioniert das ganze, jetzt möchte ich sortieren nach JAZ IS NOT NULL und ORDER BY JAZ DESC. Allerdings findet der String das Feld JAZ in der WHERE Klausel nicht.

Code:
SELECT
	ID,
	Datum,
	Gleitzeit,
	(
		SELECT
			ROUND(SUM(Gleitzeit), 2)
		FROM
			tblAnwesenheit AS T1
		WHERE
			tblAnwesenheit.ID >= T1.ID
	)AS Verlauf,
	(
		SELECT

		IF(
			Verlauf < 25.00,
			Date_ADD(Datum, INTERVAL 1 YEAR),
			''
		)
	)AS JAZ
FROM
	tblAnwesenheit;
Kann mir da jemand helfen?

Danke im voraus
Gruß Marvin

Geändert von Marvin75 (13.06.2011 um 13:13 Uhr).
Marvin75 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 13.06.2011, 11:56  
Erfahrener Benutzer
 
Registriert seit: 07.12.2009
Beiträge: 843
PHP-Kenntnisse:
Fortgeschritten
chorn befindet sich auf einem aufstrebenden Ast
Standard

Da kopierst du den Teil mit der Berechnung, also ohne das AS JAZ, als ORDER BY Klausel ein.
chorn ist offline   Mit Zitat antworten
Alt 13.06.2011, 17:09  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
PHP-Code:
(
        
SELECT

        
IF(
            
Verlauf 25.00,
            
Date_ADD(DatumINTERVAL 1 YEAR),
            
''
        
)
    )AS 
JAZ 
ist eine Menge, kein Feld. Wenn Du Sortieren willst, musst DU ein Feld dieser Menge Selektieren. Oder besser das gesamte JOIN Konstrukt nochmal umbauen.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 14.06.2011, 12:14  
Benutzer
 
Registriert seit: 10.06.2011
Beiträge: 34
PHP-Kenntnisse:
Anfänger
Marvin75 befindet sich auf einem aufstrebenden Ast
Marvin75 eine Nachricht über ICQ schicken
Standard

Code:
(
		SELECT

		IF(
			Verlauf < 25.00,
			Date_ADD(Datum, INTERVAL 1 YEAR),
			''
		)
	)AS JAZ
Ich hatte gedacht das ich durch SELECT ....... AS JAZ ein Feld Selektiert hatte. Aber wie kann ich jetzt die Menge selektieren?
Marvin75 ist offline   Mit Zitat antworten
Alt 14.06.2011, 12:27  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
jetzt möchte ich sortieren nach JAZ IS NOT NULL und ORDER BY JAZ DESC. Allerdings findet der String das Feld JAZ in der WHERE Klausel nicht.
Was hat die WHERE-Klausel mit Sortierung zu tun?

Zitat:
Aber wie kann ich jetzt die Menge selektieren?
Lass das SELECT ganz weg ... das Ergebnis des Ausdruckes IF(...) kannst du auch direkt an anderen Stellen einsetzen, ohne es erst zu "selektieren".
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 14.06.2011, 13:42  
Benutzer
 
Registriert seit: 10.06.2011
Beiträge: 34
PHP-Kenntnisse:
Anfänger
Marvin75 befindet sich auf einem aufstrebenden Ast
Marvin75 eine Nachricht über ICQ schicken
Standard

Zitat:
Was hat die WHERE-Klausel mit Sortierung zu tun?
Die Datensätze ohne Eintrag in der Menge/Feld sollen nicht angezeigt werden. Bei 1400 Einträgen zur Zeit dauert die Abfrage recht lange, wenn nur die Datensätze angezeigt werden die einen Eintrag in JAZ haben sind das weit aus weniger. Sortierung war vielleicht eine falsche Bezeichung. Wenn man dann noch ORDER BY JAZ DESC LIMIT 0,1 machen könnte hätte ich nur einen Datensatz und dadurch hoffentlich schneller in der Abfrage.

Wenn ich das SELECT weglassen findet die Abfrage die Menge JAZ nicht mehr.

Code:
SELECT
	ID,
	Datum,
	Gleitzeit,
	YEAR(Datum)AS Jahr,
	(
		SELECT
			ROUND(SUM(Gleitzeit), 2)
		FROM
			tblAnwesenheit AS T1
		WHERE
			tblAnwesenheit.ID >= T1.ID
	)AS Verlauf,
	(
		SELECT

		IF(
			Verlauf < 25.00,
			Date_ADD(Datum, INTERVAL 1 YEAR),
			''
		)
	)AS JAZ,
	(SELECT DATEDIFF(JAZ, NOW()))AS Diff
FROM
	tblAnwesenheit
WHERE

IF(
	Verlauf < 25.00,
	Date_ADD(Datum, INTERVAL 1 YEAR),
	''
);
Sorry aber ganz habe ich das noch nicht verstanden.
Marvin75 ist offline   Mit Zitat antworten
Alt 14.06.2011, 13:44  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Beschreibe bitte noch mal das zugrundeliegende Tabellenschema, Dein Genaues Ziel und bau die Query dann systematisch auf.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 14.06.2011, 21:24  
Benutzer
 
Registriert seit: 10.06.2011
Beiträge: 34
PHP-Kenntnisse:
Anfänger
Marvin75 befindet sich auf einem aufstrebenden Ast
Marvin75 eine Nachricht über ICQ schicken
Standard

Hallo,

also das Tabellenschema.



Genaues Ziel der Abfrage.

In der Tabelle tblAnwesenheit speichere ich mir meine Kommen und Gehen Zeit mit Datum. Arbeitszeit und Gleitzeit wird anhand der beiden Zeiten und der Auswahl Text errechnet. Die Spalte Text ist welche Schicht, Schulung, Rufbereitschaft usw. ich an diesem eingegenenen Tag habe.

JAZ bedeutet Jahresarbeitszeit.
Das bedeutet, das die Gleitzeit mindestens einmal im Jahr unter 25,00 Stunden kommen muss.

Wenn dann die Gleitzeit unter 25 Std ist wird das Jahresarbeitszeitende auf diesen Tag plus ein Jahr gelegt. Ich will nun das Jahresarbeitszeitende und die Differenz von Jetzt bis zum Jahresarbeitszeitende auf meiner Auswertung anzeigen. Die Differenz habe ich mir testweise mit einem

Code:
(SELECT DATEDIFF(JAZ, NOW()))AS Diff
in den Query eingebaut.

Der Query sieht bis jetzt so aus

Code:
SELECT
	ID,
	Datum,
	Gleitzeit,
	(
		SELECT
			ROUND(SUM(Gleitzeit), 2)
		FROM
			tblAnwesenheit AS T1
		WHERE
			tblAnwesenheit.ID >= T1.ID
	)AS Verlauf,
	(
		SELECT

		IF(
			Verlauf < 25.00,
			Date_ADD(Datum, INTERVAL 1 YEAR),
			''
		)
	)AS JAZ,
	(SELECT DATEDIFF(JAZ, NOW()))AS Diff
FROM
	tblAnwesenheit;
Da die Tabelle tblAnwesenheit schon knapp 1400 Einträge enthält dauert die auffaddiererei schon einige Zeit. Deshalb wollte ich jeweils nur den letzten Datensatz mit JAZ anzeigen lassen. Wenn natürlich die Gleitzeit länger unter 25,00 Std bleibt muss immer das Datum plus ein Jahr als letzter Datendatensatz angezeigt werden.

In meiner Access Datenbank wo ich das schon erfolgreich benutze sieht die Query so aus.

Code:
SELECT
	tblAnwesenheit.AnwesenheitID,
	tblAnwesenheit.Datum_Feld,
	Year([ Datum_Feld ])AS Jahr,
	Month([ Datum_Feld ])AS Monat,
	tblAnwesenheit.Gleitzeit,
	(
		SELECT
			Round(sum(Gleitzeit), 2)
		FROM
			tblAnwesenheit AS temp
		WHERE
			temp.AnwesenheitID <= tblAnwesenheit.AnwesenheitID
	)AS Gleitzeitverlauf,
	IIf(
		[ Gleitzeitverlauf ]< 25,
		DateAdd("yyyy", 1 ,[ Datum_Feld ])
	)AS JAZ
FROM
	tblAnwesenheit
ORDER BY
	tblAnwesenheit.AnwesenheitID;
Die Felder in der Access Datenbank für Jahr und Monat brauche ich in der
neuen Query nicht mehr. Hier wurde auch nicht nur ein Datensatz angezeigt sondern alle, die Access Datenbank war wohl etwas schneller als meine Linkstation Mini.

Warum ich das ganze mache ist einfach. Ich habe keinen Windows PC Zuhause mehr, somit läuft meine Access Datenbank nur noch in einer Virtuellen Maschine vom Mac. Die Datensicherung ist auch so eine Sache, bei Access habe ich alles in einer Datei, wenn diese defekt ist kann ich hoffen das das Backup einigermaßen auf dem neusten Stand ist. Deswegen wollte ich das ganze mit PHP und MySQL machen. Bringt bis auf die Stolpersteine der MySQL Querys nur Vorteile finde ich.

Geändert von Marvin75 (14.06.2011 um 21:31 Uhr).
Marvin75 ist offline   Mit Zitat antworten
Alt 14.06.2011, 23:07  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ich sehe in Deinen komischen Statements nicht durch, schon weil Du ständig SELECT benutzt, obwohl Du wohl nur ein Feld selektieren willst. Schreib doch mal korrekte JOINs, dann steigt man vielleicht durch. Ich muss gestehen, das mit der Gleitzeit habe ich noch nicht ganz kapiert.

Code:
SELECT    ID        ,
          Datum     ,
          Gleitzeit ,

FROM      tblAnwesenheit AS A1
JOIN      tblAnwesenheit AS A2
  ON      ?
Ob Du jeden Tag die Tabelle updatest und bisherige Gesamtzeiten einträgst ist mir auch nicht ganz klargeworden. Aber irgendwie habe ich das so verstanden.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 15.06.2011, 08:55  
Benutzer
 
Registriert seit: 10.06.2011
Beiträge: 34
PHP-Kenntnisse:
Anfänger
Marvin75 befindet sich auf einem aufstrebenden Ast
Marvin75 eine Nachricht über ICQ schicken
Standard

Hallo,

Ich trage jeden Tag Datum, Kommen, Gehen und den Text ein. Anhand dieser Daten werden Anwesenheit, Arbeitszeit und Gleitzeit errechnet.
Jeder Datensatz beinhaltet dann für einen Tag Kommen, Gehen, Text, Anwesenheit, Arbeitszeit, Sollzeit, Gleitzeit und der Name.

So sieht die Tabelle aus, jeden Tag ein neuer Datensatz.

http://dl.dropbox.com/u/18240102/tbl...heit_Daten.jpg

Die Gleizeit soll kumuliert werden. Wenn der kumulierte Wert <=25 ist, soll in diesem Datensatz ein Datum eingetragen werden. So Sieht die Access Abfrage aus.

http://dl.dropbox.com/u/18240102/Abfrage_Daten.jpg

Zitat:
Schreib doch mal korrekte JOINs, dann steigt man vielleicht durch.
Genau das ist das Problem, ich weiß nicht wie

Zitat:
Ich muss gestehen, das mit der Gleitzeit habe ich noch nicht ganz kapiert.
Jahresarbeitszeit

Die aufgebaute Gleitzeit, die durch Überstunden oder Mehrarbeit entsteht, muss abgefeiert werden. Die Gleitzeit besteht aus einer Ampelreglung.
Gleitzeit zwischen -25 und +25 Stunden ist im Grünen Bereich.
Gleitzeit von -25Std bis -50Std oder +25Std bis +50Std ist im Gelben Bereich
Gleitzeit von >50Std oder -50Std ist im roten Bereich.

Einmal im Jahr sollte man sich im Grünen Bereich befinden.

Wenn der Grüne Bereich erreicht wurde (durch abfeiern der Gleitzeit), wird das Datum auf den Tag gesetzt wo man den grünen Bereich erreicht hat plus ein Jahr.

Geändert von Marvin75 (15.06.2011 um 11:35 Uhr). Grund: überbreite Bilder durch Links ersetzt
Marvin75 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Benutzerdefiniertes Sortieren gaxx PHP Einsteiger 12 29.05.2011 17:39
[Erledigt] Datenbank Abfrage Wert aus Feld in anderes Feld schreiben Kia Datenbanken 3 26.05.2011 10:08
Tabellenausgabe sortieren mit Dropdown liste ahunzs PHP Einsteiger 10 23.05.2011 15:33
[Erledigt] Textdatenbank zeilenweise alphabetisch sortieren - Drop Down Menü alphabet UdoDirk PHP Tipps 2010 1 24.07.2010 10:45
input feld focusieren jens76 JavaScript, Ajax und mehr 4 10.05.2010 17:46
SQL: Inhalte von zwei Feldern in ein Feld übertragen inichino Datenbanken 4 05.11.2009 14:22
DB Feld auf ein anderes innerhalb umleiten vampsm Datenbanken 6 28.09.2009 13:24
[Erledigt] Tabelle automatisch generieren scheffie PHP Tipps 2009 18 07.06.2009 16:17
[Erledigt] Limit auf Ergebnissumme mehrerer Tabellen Frank Datenbanken 8 02.09.2008 11:33
[gelöst] Zahlen sortieren mit Varchar moose Datenbanken 8 21.07.2008 13:53
Array nach mehreren Feldern sortieren Marcel1 PHP Tipps 2008 4 04.06.2008 05:09
Formular feld Black-Devil PHP Tipps 2008 12 05.03.2008 16:15
Nach Datum sortieren zoro Datenbanken 9 28.11.2007 14:00
Select Feld nach Überprüfung PHP Tipps 2005-2 4 31.08.2005 22:22
Array nach Feld sortieren PHP Tipps 2005-2 2 07.08.2005 23:00

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql unterabfrage sortieren, access nach berechnetem feld sortieren, access sortieren nach berechnetem feld, access daten nach abfrage sortieren unterabfrage, sql feld in unterabfrage, access monat jahr aus datum sortieren \in ein feld\, sql feld aus unterabfrage anzeigen, access unterabfrage sortieren, mysql feld aus unterabfrage in abfrage benutzen, unterabfrage sortieren access, abfrage mit berechnetem feld mysql, sql unterabfrage sortierung, php differenzen sortieren, access unterabfrage ergebnis ein feld, daten durch unterabfrage sortieren, access abfrage nach berechnetem feld sortieren, access unterabfrage in berechnetem tabellenfeld, order by access sortieren nach feld, access 2 abfragen zusammen sortieren nach datum, unterabfrage sortieren

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:09 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum