mabue88
Goto Top

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

Content-Key: 257673

Url: https://administrator.de/contentid/257673

Printed on: April 19, 2024 at 19:04 o'clock

Member: Doskias
Doskias Dec 15, 2014 updated at 11:01:09 (UTC)
Goto Top
Moin

Versuch mal:

select * from [tabellenname] order by Uhrzeit desc limit 20

Das sollte deine Anzeige wie gewünscht anpassen.
Member: mabue88
mabue88 Dec 15, 2014 at 11:01:58 (UTC)
Goto Top
Hallo Doskias,

danke für den Hinweis, aber das ich nicht genau das was ich suche.
Ich benötige nicht die letzten 20 Aktionen, sondern die letzten 20 Aktionen von jedem Benutzer...

Gruss
mabue
Member: Doskias
Doskias Dec 15, 2014 updated at 11:12:19 (UTC)
Goto Top
Achso, habe ich missverstande. In einer Abfrage oder in mehreren?

 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. ;)
Member: Gersen
Gersen Dec 15, 2014 at 12:33:56 (UTC)
Goto Top
Hallo,

ungetestet (und für den Fall, die Einträge im Feld "aktion" beinhalten kein ","):
select benutzername, substring_index(group_concat(aktion order by uhrzeit desc),',',20) grouped_aktion from tabellenname group by benutzername

Gruß,
Gersen