WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   SQL-Frage (MySQL) (http://www.wcm.at/forum/showthread.php?t=111196)

Gonte 06.10.2003 13:44

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 ;)

JoergStueger 06.10.2003 16:11

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

dreamer 06.10.2003 16:13

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

käptn 06.10.2003 16:13

Re: SQL-Frage (MySQL)
 
Zitat:

Original geschrieben von Gonte
ich hoffe, ich habe das problem halbwegs verständlich beschrieben
http://www.mona-net.at/inc/img/forum/sm/nein.gif :)

~

_m3 06.10.2003 16:19

Und was ist das Problem bei der Abfrage?

Gonte 06.10.2003 16:30

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)

_m3 06.10.2003 16:45

ja und? kommt das nicht raus?
Was ist Dein Problem?

Gonte 06.10.2003 19:40

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

_m3 06.10.2003 19:48

Code:

select personid, max(startdate), enddate
from table
where personid = BENUTZERID_DES_AKTUELLEN_BENUTZERS;

IMHO. :)

Gonte 06.10.2003 19:57

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
...


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:02 Uhr.

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