Martin Jakobi: MySQL - Doppelte Einträge filtern

Beitrag lesen

Hallo,

ich weiß, dass dieses Thema nun schon mehrfach aufkam. Nach langem Googlen hat bei mir jedoch kein Ergebnis funktioniert.

Zu meinem Problem:
Ich nutze MySQL - 5.0.32

Und habe drei Tabellen wo folgende Spalten für den Fall interessant sind:

Tabelle stream
stream_id (INT, Primary, Index)
user_id (INT)
type_id (INT)
linux_timestamp (INT)

Beispielinhalt stream:
1 | 230 | 2 | 1268615468
2 | 180 | 2 | 1268615483
3 | 230 | 1 | 1268615504
4 | 230 | 3 | 1268615555
5 | 320 | 1 | 1268615567

Tabelle benutzer
user_id (INT, Primary, Index)
nickname (varchar)
vorname (varchar)
vornameview (BOOL/SMALLINT)

Beispielinhalt benutzer
180 | martin | Martin  | 1
230 | theo   | Theodor | 1
320 | jonas  | Jonas   | 1

Tabelle type
type_id (INT, Primary, Index)
type_text (varchar)
icon (varchar)

Beispielinhalt type:
1 | Egal | Egal
2 | Egal | Egal
3 | Egal | Egal

Nun möchte ich mit einer Abfrage wie der gleich folgenden erreichen, dass mir die (in diesem Beispiel) zwei neuesten Einträge aus der Tabelle stream angezeigt werden. Dabei soll nur ein Eintrag pro User angezeigt werden. In meinem Beispiel in der Tabelle stream sollen also nur Eintrag 5 und 4 ausgegeben werden (also die neuesten des jeweiligen Users).

Nun liest man überall "benutze GROUP BY oder DISTINCT". Allerdings wenn ich Group by benutze, lässt er einfach Daten weg. In meinem Beispiel der Tabelle stream werden dann Daten von dem User mit der ID 230 und 180 ausgegeben, nicht jedoch von dem User 320 (Eintrag 5).

Möglicherweise verstehe ich die Funktion GROUP BY nicht richtig. Habt ihr eine Lösung für mich?

Hier der Code, welchen ich zurzeit verwende (auf die Beispiele gemünzt):

SELECT ta.*, tt.type_text, tt.icon, tu.nickname, tu.vorname, tu.vornameview  
FROM stream AS ta, type AS tt, benutzer AS tu  
WHERE ta.type_id = tt.type_id AND ta.user_id = tu.user_id  
GROUP BY ta.user_id  
ORDER BY ta.linux_timestamp DESC  
LIMIT 2

Liebe Grüße
Martin