php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 15.06.2011, 14:38  
Neuer Benutzer
 
Registriert seit: 28.01.2011
Beiträge: 23
PHP-Kenntnisse:
Anfänger
raiguen ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Unabhängig davon, ob und in wiefern die eigentliche Abfrage sinnvoll ist, kann man sich mit folgendem 'Trick' helfen:

Code:
SELECT t.* 
FROM
(
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
) AS t
	
ORDER BY t.Verlauf, t.JAZ;
Somit lässt sich auch nach 'berechneten' Feldern sortieren.
raiguen ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 15.06.2011, 18:58  
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 Raiguen,

Vielen Dank,

Code:
SELECT t.* 
FROM
(
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
) AS t

Where t.JAZ IS NOT NULL
	
ORDER BY t.JAZ DESC Limit 0,1;
So bekomme ich nur diesen einen ersehnten Datensatz.

Da die Funktion jetzt gegeben ist wäre es nur schön wenn mir jemand das mit dem richtigen JOIN erklären könnt. Ansonsten bedanke ich mich bei all denen die mir geholfen haben.
Marvin75 ist offline   Mit Zitat antworten
Alt 17.06.2011, 14:57  
Neuer Benutzer
 
Registriert seit: 28.01.2011
Beiträge: 23
PHP-Kenntnisse:
Anfänger
raiguen ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
schon weil Du ständig SELECT benutzt, obwohl Du wohl nur ein Feld selektieren willst.
Ist insofern ja auch richtig, weil das EINE Feld kummuliert werden soll. Mit JOIN kommt man da m.E. nicht unbedingt weiter...

Allerdings lässt sich dieses Subselect
Code:
	(
		SELECT
			ROUND(SUM(Gleitzeit), 2)
		FROM
			tblAnwesenheit AS T1
		WHERE
			tblAnwesenheit.ID >= T1.ID
	) AS Verlauf,
performanter gestalten:

Code:
	@verlauf := ROUND(@verlauf+Gleitzeit, 2)
	 AS Verlauf
Warum? Zu der (Laufzeit)Variablen @verlauf wird NUR der aktuelle Feldwert (hier Gleitzeit) addiert, während bei der urspünglichen Subselect-Version jedesmal ALLE bisherigen Datensätze (intern) gesammelt werden, um daraus dann mittels SUM() den kummulierten Wert für die neue Datenzeile zu erhalten. Dürfte einleuchtend sein, dass das bei (sehr) vielen Datensätzen dann schon dauert...

Das gesammte Statement sähe dann so aus:
Code:
SELECT t.* 
FROM
(
SELECT
	ID,
	Datum,
	Gleitzeit,
	@verlauf:=@verlauf+ROUND(Gleitzeit, 2) AS Verlauf,
	IF(@verlauf < 25.00,
			Date_ADD(Datum, INTERVAL 1 YEAR),
			NULL
		) AS JAZ

FROM
	tblAnwesenheit, (SELECT @verlauf:=0) var
) AS t

WHERE t.JAZ IS NOT NULL
	
ORDER BY t.JAZ DESC Limit 0,1;
Der 'trick' ist, dass in der FROM-Klausel einmalig die Variable @verlauf auf einen definierten Anfangswert gesetzt wird und dann innerhalb des SELECT mit dem aktuellen Feldwert kummuliert wird.
Da MySql das (SELECT @verlauf:=0) als Tabelle ansieht, muss für diesen Ausdruck in der FROM-Klausel zwingend ein Alias angegeben werden (auch wenn dieser nicht weiter verwendet wird).
raiguen 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
select nach unterquery sortieren, sortieren nach berechnetem feld, select feld als unterabfrage, nach unterabfrage sortieren, php array nach einem berechneten wert sortieren, abfrage nach berechnetem feld sortieren, datenbankabfragen tbl sponsoren

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