Select / Distinct einmal anders
Michael
- datenbank
Hallo,
seit Stunden versuche ich eine scheinbar "einfache" select Anweisung für eine Tabelle in einer MySQL Datenbank zu erstellen.
Und zwar liegen folgende Felder in der Tabelle:
-> id (Integer Primärschlüssel, auto_increment)
-> nutzerid (Integer)
-> zeit_login (Integer -> enthält Timestamp)
-> zeit_logout (Integer -> enthält Timestamp)
Nun wollte ich einfach mal die letzten zehn Besucher meiner Website ausgeben, wobei jedoch jeder Nutzer nur maximal einmal auftreten soll (mit seinem letzten login)
Mit der Distinct Anweisung komme ich nicht weiter, da diese ja bei Begrenzung auf ein Feld (nutzerid) die restlichen Felder nicht zurückgibt....
Ich hätte also am liebsten folgende Anweisung:
"SELECT DISTINCT nutzerid,zeit_login,zeit_logout FROM tabelle LIMIT 10"
wobei sich das Distinct aber nur auf nutzerid beziehen soll und bei mehreren Einträgen den Datensatz des aktuellen users zurückgibt, der den höchsten zeit_login timestamp hat...
Ich hoffe, dass jemand die Lösung hat ;-)
Gruß
Micha
Holladiewaldfee,
Ich hoffe, dass jemand die Lösung hat ;-)
Ich würde hier kein DISTINCT verwenden sonder die Datensätze mit GROUP BY zusammenfassen:
SELECT nutzerid, zeit_login, zeit_logout FROM tabelle GROUP BY nutzerid ORDER BY zeit_login DESC LIMIT 0,10
Ciao,
Harry
Holladiewaldfee,
Ich hoffe, dass jemand die Lösung hat ;-)
Ich würde hier kein DISTINCT verwenden sonder die Datensätze mit GROUP BY zusammenfassen:
SELECT nutzerid, zeit_login, zeit_logout FROM tabelle GROUP BY nutzerid ORDER BY zeit_login DESC LIMIT 0,10
Ciao,
Harry
Hi,
das funktioniert schon recht gut, aber leider werden zwar die Datensätze absteigend geordnet angezeigt, aber der erste Datensatz des Nutzers der ausgegeben wird ist der älteste und nicht der neueste...
Hab noch keine Lösung gefunden.
Gruß
Michael
Hi,
hab eine Lösung gefunden. Musste innerhalb der Select Anfrage noch mit MIN() bzw. MAX() arbeiten....
Gruß
Michael
Servus,
Poste doch mal Deine Lösung.
Würde bestimmt einige interesieren.
z.B. mich :-))
Gruss Matze
Hallo,
Poste doch mal Deine Lösung.
Würde bestimmt einige interesieren.
select nutzer_id, max(zeit_login)
from tabelle
group by nutzer_id
order by max(zeit_login) desc
limit 10
(ungetestet)
Grüße
Klaus
Servus,
so könnte es klappen.
Hab ur keine Tabelle wo ich es prüfen kann. Bin mir nämlich nicht sicher, ob distinct und max() in einer Abfrage vorkommen darf.
Select Distinct nutzerid, max(zeit_login), zeit_logout from tabelle;
Eventuell benötigst du ja dann auch distinct gar nicht mehr :-))
Gruss Matze