![]() |
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 ;) |
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 |
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 |
Re: SQL-Frage (MySQL)
Zitat:
~ |
Und was ist das Problem bei der Abfrage?
|
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) |
ja und? kommt das nicht raus?
Was ist Dein Problem? |
Zitat:
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 |
Code:
select personid, max(startdate), enddate |
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 ... |
warum machst kein sub-select?
Code:
select t1.personid, |
leider befindet sich die mysql 4.1 noch in der alpha version (wodurch leider kein produktiv-einsatz möglich ist) und erst ab dieser version sind sub-selects möglich.
ich warte auf die 4.1er eh schon wie auf das christkindl :D |
Zitat:
select personid, startdate, enddate from tabelle order by startdate desc limit 0,1 gruss, snowman |
und folgendes geht auch net?
PHP-Code:
|
vielen dank für eure antworten!
@snowman: dein vorschlag würde funktionieren, wenn ich nur eine person bräuchte, jedoch hätte ich gerne eine gruppierung nach personen, um eine online-liste aller personen zu erhalten. @jonix: genau dieser query ist mein ausgangspunkt. jedoch erhalte ich bei diesem query als ergebnis NICHT das zum maximalen startdate korrespondierende enddate (d.h. jenes das im selben record steht), sondern einfach das des allerersten records, der zu dieser person in die datenbank eingefügt wurde. (worin ja genau mein problem besteht, da ich das korrespondierende enddate bräuchte) |
Zitat:
gruss, snowman |
ok, jetzt versteh ich, sorry :-) ich versuchs nochmal:
PHP-Code:
|
!!!!!!! ;)
very nice jonix & big thankx! das bringt mich einer lösung schon sehr sehr nahe! :) |
Alle Zeitangaben in WEZ +2. Es ist jetzt 01:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag