MySQL - Anzahl der Datensätze in Abfrage verringern
Hallo,
ich habe ein System, in dem dessen Benutzer diverse Aktionen ausführen können. Die von den Benutzern ausgelösten Aktionen werden in einer MySQL-Tabelle gespeichert. Mit der Zeit sammeln sich recht viele Datensätze in der Tabelle.
Für einen groben Überblick wird eine Abfrage benötigt, welche von jedem Benutzer die letzten 20 Aktionen filtert.
Wie kann ich so etwas umsetzen?
Die Tabelle besitzt folgende Spalten:
- ID (INT UNSIGNED)
- Uhrzeit (DATETIME)
- Benutzername (VARCHAR)
- Aktion (VARCHAR)
Danke
Gruss
mabue88
ich habe ein System, in dem dessen Benutzer diverse Aktionen ausführen können. Die von den Benutzern ausgelösten Aktionen werden in einer MySQL-Tabelle gespeichert. Mit der Zeit sammeln sich recht viele Datensätze in der Tabelle.
Für einen groben Überblick wird eine Abfrage benötigt, welche von jedem Benutzer die letzten 20 Aktionen filtert.
Wie kann ich so etwas umsetzen?
Die Tabelle besitzt folgende Spalten:
- ID (INT UNSIGNED)
- Uhrzeit (DATETIME)
- Benutzername (VARCHAR)
- Aktion (VARCHAR)
Danke
Gruss
mabue88
Please also mark the comments that contributed to the solution of the article
Content-ID: 257673
Url: https://administrator.de/forum/mysql-anzahl-der-datensaetze-in-abfrage-verringern-257673.html
Printed on: May 13, 2025 at 17:05 o'clock
4 Comments
Latest comment
Achso, habe ich missverstande. In einer Abfrage oder in mehreren?
Und dann entsprechend eine Abfrage pro Name. Sonst würde mir nur die Idee einfallen das ganze zu verschachteln. Habe aber grade SQL-Test-DB zur Hand, aber so könnte es gehen:
So müsste es theoretisch gehen, aber wie gesagt: Der Code ist aus dem Kopf und SQL ist nicht mein Spezialgebiet. Vielleicht hat jemand ne elegantere Lösung. ;)
select * from [tabellenname] where Benutzername= "name" order by Uhrzeit desc limit 20.
Und dann entsprechend eine Abfrage pro Name. Sonst würde mir nur die Idee einfallen das ganze zu verschachteln. Habe aber grade SQL-Test-DB zur Hand, aber so könnte es gehen:
select * from Tabelle where
(select * from [tabellenname] where Benutzername= "name" order by Uhrzeit desc limit 20.) OR
(select * from [tabellenname] where Benutzername= "name2" order by Uhrzeit desc limit 20.) OR
(select * from [tabellenname] where Benutzername= "name3" order by Uhrzeit desc limit 20.) ...
So müsste es theoretisch gehen, aber wie gesagt: Der Code ist aus dem Kopf und SQL ist nicht mein Spezialgebiet. Vielleicht hat jemand ne elegantere Lösung. ;)