WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 06.10.2003, 13:44   #1
Gonte
Veteran
 
Registriert seit: 15.08.2001
Alter: 50
Beiträge: 235


Standard SQL-Frage (MySQL)

huhu leute!

ich hab da ein kleines problem, mit dem ich nicht zurecht komme, und hoffe auf eure hilfe.

ich habe eine tabelle, in der stehen u.a. die folgenden felder:

- id
- userid
- startdate als int (unix-timestamp)
- enddate als int (unix-timestamp)

zu einer person werden zeiten erfasst, d.h. von wann bis wann sie eingeloggt war bzw. ist. wenn sie gerade eingeloggt ist, befindet sich im letzten eintrag bei enddate ein NULL-wert.

jetzt will ich mit einem query rausfinden, was der letzte eingetragene datensatz ist, d.h. jener mit dem grössten startdate-timestamp und den dazu korresponierenden enddate-timestamp. das problem ist, dass letzterer auch NULL sein kann (wenn der user eben noch eingeloggt ist).

ich hoffe, ich habe das problem halbwegs verständlich beschrieben und dass mir jemand helfen kann.

danke im voraus
Gonte ist offline   Mit Zitat antworten
Alt 06.10.2003, 16:11   #2
JoergStueger
Master
 
Registriert seit: 28.10.2002
Alter: 47
Beiträge: 626


JoergStueger eine Nachricht über ICQ schicken
Standard

Hallo!

Warum machst Du nicht ein SELECT MAX auf die Startdate? Wenn NULL drinnensteht kannst Du ja nen String á la "Ist noch angemeldet" ausgeben, oder versteh ich Dich falsch?

LG
Jörg
JoergStueger ist offline   Mit Zitat antworten
Alt 06.10.2003, 16:13   #3
dreamer
Veteran
 
Registriert seit: 05.06.2001
Alter: 51
Beiträge: 259


Standard

wenn ich das ganze richtig verstanden hab, könnte die abfrage so aussehen:

select id from tabelle order by startdate desc limit 0,1

= sortiert die tabelle absteigend noch startdate und gibt dir die id des datensatzes
____________________________________
lg, thx usw.
dreamer
dreamer ist offline   Mit Zitat antworten
Alt 06.10.2003, 16:13   #4
käptn
Inventar
 
Registriert seit: 04.11.2001
Alter: 45
Beiträge: 2.150


Standard Re: SQL-Frage (MySQL)

Zitat:
Original geschrieben von Gonte
ich hoffe, ich habe das problem halbwegs verständlich beschrieben


~
____________________________________
LOL - Mein erstes Post im Programmier Forum

MACINTOSH - Most Applications Crash, If Not The Operating System Hangs
käptn ist offline   Mit Zitat antworten
Alt 06.10.2003, 16:19   #5
_m3
Inventar
 
Registriert seit: 24.09.2001
Beiträge: 7.335


Standard

Und was ist das Problem bei der Abfrage?
____________________________________
Weiterhin zu finden auf http://martin.leyrer.priv.at , http://twitter.com/leyrer , http://www.debattierclub.net/ , http://www.tratschen.at/ und via Instant Messaging auf Jabber: m3 <ät> cargal.org .
_m3 ist offline   Mit Zitat antworten
Alt 06.10.2003, 16:30   #6
Gonte
Veteran
 
Registriert seit: 15.08.2001
Alter: 50
Beiträge: 235


Standard

ok, ich versuchs nochmal:

in der tabelle stehen von vielen usern jeweils viele login-daten. ich will zu jeder person den zugehörigen letzten record ausfindig machen (kein problem mit max(startdate) und group by personid). jedoch bräuchte ich dann zum startdate das zugehörige enddate und nicht irgendeines, sondern eben jenes das bei dem maximalen startdate drinnen steht.

weil wenn dieses enddate NULL ist, dann weiss ich ob der user angeloggt ist oder nicht.

z.b.

select personid, max(startdate), enddate
from table
group by personid

es soll dabei rauskommen:

person 1 mit letztem login um xxx und logout um xxx (oder eben NULL)
Gonte ist offline   Mit Zitat antworten
Alt 06.10.2003, 16:45   #7
_m3
Inventar
 
Registriert seit: 24.09.2001
Beiträge: 7.335


Standard

ja und? kommt das nicht raus?
Was ist Dein Problem?
____________________________________
Weiterhin zu finden auf http://martin.leyrer.priv.at , http://twitter.com/leyrer , http://www.debattierclub.net/ , http://www.tratschen.at/ und via Instant Messaging auf Jabber: m3 <ät> cargal.org .
_m3 ist offline   Mit Zitat antworten
Alt 06.10.2003, 19:40   #8
Gonte
Veteran
 
Registriert seit: 15.08.2001
Alter: 50
Beiträge: 235


Standard

Zitat:
Original geschrieben von Gonte
jedoch bräuchte ich dann zum startdate das zugehörige enddate und nicht irgendeines, sondern eben jenes das bei dem maximalen startdate drinnen steht.
mit dem angegeben query bekomme ich zwar das richtige startdate, aber eben nicht das dazugehörige enddate, sondern jenes enddate des allerersten records.

also z.b.

...
person 1 startdate 1 enddate 1
person 1 startdate 2 enddate 2
person 1 startdate 3 enddate 3 (letzter eintrag person 1)
... weitere personen ...

der query liefert als ergebnis:

person 1 startdate 3 enddate 1 (!!!)

ich will aber enddate 3
Gonte ist offline   Mit Zitat antworten
Alt 06.10.2003, 19:48   #9
_m3
Inventar
 
Registriert seit: 24.09.2001
Beiträge: 7.335


Standard

Code:
select personid, max(startdate), enddate
from table
where personid = BENUTZERID_DES_AKTUELLEN_BENUTZERS;
IMHO.
____________________________________
Weiterhin zu finden auf http://martin.leyrer.priv.at , http://twitter.com/leyrer , http://www.debattierclub.net/ , http://www.tratschen.at/ und via Instant Messaging auf Jabber: m3 <ät> cargal.org .
_m3 ist offline   Mit Zitat antworten
Alt 06.10.2003, 19:57   #10
Gonte
Veteran
 
Registriert seit: 15.08.2001
Alter: 50
Beiträge: 235


Standard

vielen dank für deine antwort _m3!

leider funktioniert dein vorschlag mal prinzipiell nicht, weil eine aggregatsfunktion wie max nur in einem select mit gruppierung vorkommen darf, wenn noch andere feldwerte ausgelesen werden.

zudem würde ich eine übersicht über alle personen benötigen, in dem sinn:

personid - letztes einlogdatum - dazugehöriges auslogatum
personid - letztes einlogdatum - dazugehöriges auslogatum
personid - letztes einlogdatum - dazugehöriges auslogatum
...
Gonte ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:57 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag