php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.12.2007, 10:12  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard auf nächsten Datensatz zugreifen

Hallo Leute,

ich würde gerne in einer SQL-Abfrage auf den nächsten Datensatz zugreifen um Datensätze auszuschließen. Hintergrund dazu ist das ich immer einen Zeitpunkt in die Datenbank schreibe und vom Timestamp des ersten Datensatzes bis zum Timestamp des nächsten Datensatzes die Dauer berechne. Ist die Dauer zum Beispiel unter 10 Sekunden soll der Datensatz ignoriert werden.

Hier einige Beispieldaten:

Code:
id | timestamp | user 
1 | 1191693900 | 1
2 | 1191693905 | 2
3 | 1191693920 | 2
4 | 1191693925 | 1
5 | 1191693928 | 2
6 | 1191693950 | 1
Heisst dann folgendes: (nur zum veranschaulichen)

Code:
User 1:
1 | 1191693900 | 1  // dauer 25 Sekunden (bis Datensatz 4)
4 | 1191693925 | 1  // dauer 25 Sekunden (bis Datensatz 6)
6 | 1191693950 | 1  // dauer unbekannt (müsste noch aktiv sein)

User 2:
2 | 1191693905 | 2  // dauer 15 Sekunden (bis Datensatz 3)
3 | 1191693920 | 2  // dauer 8 Sekunden SOLL NICHT SELEKTIERT WERDEN
5 | 1191693928 | 2 // dauer unbekannt (müsste noch aktiv sein)
Ob die Datensätze bei unbekannter Dauer selektiert werden ist egal, das kann vernachlässigt werden.

Ist das was ich vorhabe überhaupt möglich? Wenn ja wie gehe ich daran? Jemand ne Idee?
cycap ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 03.12.2007, 12:35  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.654
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo cycap,

derartige Funktionen würde ich in Stored Procedures legen. Dort sollte es möglich sein, Daten zu selektieren und entsprechend gefiltert an dich zurückzugeben.

Konkrete Umsetzungsidee habe ich im Moment nicht.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 05.12.2007, 19:07  
Erfahrener Benutzer
 
Registriert seit: 04.12.2004
Beiträge: 129
Ratte78
Standard

Wie wärs damit?

Code:
SELECT s.timestamp,
	(SELECT
             MIN(s1.timestamp)  /* Nur ein Datensatz! */
         FROM
             stempeluhr s1 
         WHERE
             user = 1 AND 
             s1.timestamp > s.timestamp ORDER BY user, timestamp) /* Der nächst größere wie vom Umgebendem SELECT */
FROM stempeluhr s 
WHERE s.user=1
ORDER BY s.user, s.timestamp
Hab die Tabelle "stempeluhr" genannt.
Das sollte immer 2 aufeinander folgende Datensätze rauswerfen.
__________________
Jede Lösung verändert das Problem.
Ratte78 ist offline   Mit Zitat antworten
Alt 18.12.2007, 12:32  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

@dr.e. was meinst du damit?

@Ratte78 das geht nicht, da in Subselects nicht auf die Werte des Main-Selects zugeriffen werden können. Will heissen

Code:
#1054 - Unknown column 's.datettime' in 'order clause'
cycap ist offline   Mit Zitat antworten
Alt 18.12.2007, 14:07  
Erfahrener Benutzer
 
Registriert seit: 07.12.2007
Beiträge: 103
PHP-Kenntnisse:
Fortgeschritten
Varon befindet sich auf einem aufstrebenden Ast
Standard

Hm, man könnte das ganze über eine Gruppierung Lösen...
Wie weit das Sinnvoll ist kann ich aber nicht beurteilen:

Code:
SELECT 
		MIN(ID)
,USER
		,MIN(`ZEIT`)
		,FLOOR(CONCAT(
			SUBSTRING(ZEIT,1,LENGTH(`ZEIT`)-2),
			(SUBSTRING(ZEIT,LENGTH(ZEIT)-1)/10)
			))  AS GROUPBYKEY
	FROM 
		zeit
	GROUP BY
		USER,GROUPBYKEY
edit:
Groupierung von 25 auf 10 Sekunden reduziert (SUBSTRING(ZEIT,LENGTH(ZEIT)-1)/10)

edit 2:
ROUND() durch FLOOR() ersetzt.
__________________
Ich mag Schildkröten!
Varon ist offline   Mit Zitat antworten
Alt 18.12.2007, 14:32  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Habs irgendwie hinbekommen, in dem ich nen JOIN auf die eigene Tabelle (als Subselect mit Order BY datetime) gemacht hab und als ON Bedingung den selben user und ein größeres Datum hab. Dann das ganze nach der Original ID gruppiert und ich hatte das gewünschte Ergebnis. Nur halt noch nicht diese 10 Sekunden Sache...
cycap 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
Bei UPDATE erkennen, ob der Datensatz existiert? Anotherone Datenbanken 7 01.04.2008 14:49
Wieso wird nur ein Datensatz angezeigt? Minimi Datenbanken 14 08.02.2008 02:54
Datensatz Teilen ecomeback PHP Tipps 2008 19 29.11.2007 19:40
Vorletzter Datensatz ermitteln Sturmfeuer Datenbanken 3 18.10.2007 14:29
Datensatz zu max() simsalabim Datenbanken 8 02.10.2007 08:56
datensatz problem 24bits PHP Tipps 2006 1 30.08.2006 18:52
einen variablen datensatz löschen PHP Tipps 2007 3 04.11.2005 12:41
Rechte für user vergeben - auf externe Datenbank zugreifen PHP Tipps 2005-2 8 07.10.2005 13:59
nächsten datensatz bei klick auf button weiter... PHP Tipps 2005-2 1 14.08.2005 12:19
Datensatz ändern funktioniert nicht PHP Tipps 2005 3 03.03.2005 23:09
Datensatz geändern? patr1k PHP Tipps 2005 12 14.02.2005 12:46
Leeren Datensatz editierbar machen Anuschka PHP Tipps 2004-2 1 27.12.2004 13:28
mehrere Benutzer arbeiten an einem Datensatz ajo_silent Datenbanken 6 20.11.2004 13:52
Datensatz abfragen und in Formularfeldern ausgeben Datenbanken 1 25.08.2004 09:24
gespeicherten Datensatz auslesen PHP Tipps 2004 1 02.06.2004 14:42

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sql nächster datensatz, sql nächsten datensatz, nächster datensatz sql, php sql nächster datensatz, sql nächster eintrag, sql nächsten datensatz abfragen, php nächster datensatz sql, php nächster datensatz, oracle nächst größere id ermitteln, sql befehl nächster datensatz, sql selbstbezug, mssql nächster datensatz, php nächsten datensatz suchen, sql abfrage nächster datensatz, oracle sql nächster datensatz, sql nächsten datensatz suchen, php nächsten datensatz finden, sql vorletztes element, das dritt vorletzte element aus einer oracle datenbank, php sql nächster eintrag

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:04 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.