MySQL Unterabfrage - Finde nur den ersten Datensatz in einem LINKEN JOIN

8

Ich versuche, eine Liste von Mitgliedsdatensätzen anzuzeigen, und ich habe ein paar Tabellen, die ich benutze, um anzuzeigen, was ich brauche.

Das ist der einfache Teil. Der Teil, mit dem ich Hilfe benötige, ist mit einer Tabelle, die viele Datensätze zu jedem Mitgliedsdatensatz enthält: Anmeldeverlauf

Ich möchte nur die erste Zeile für jeden Mitgliedsdatensatz anzeigen, die in der Login-Verlaufstabelle vorhanden ist. Alternativ möchte ich vielleicht Flipflop und den letzten Datensatz in der Login-Verlaufstabelle anzeigen.

hier ist, was ich bis jetzt habe:

%Vor%

Also, was zurückgibt, was erwartet wird.

Die 2 Spalten von tbl_members_login_history , die ich zum zurückgegebenen Ergebnis hinzufügen möchte, sind: mh. loggedtime , mh. ipaddy

Ich weiß, das tbl_members_login_history hinzufügen, da ein LINKER JOIN Duplikate zurückgibt, also denke ich, dass hier eine Unterabfrage notwendig sein muss, um nur den ersten Datensatz für den memberid zurückzugeben, der in tbl_members_login_history existiert. .

Was mich beunruhigt, ist, wenn kein Datensatz in der History-Tabelle existiert, möchte ich immer noch diese Member-Informationen anzeigen, aber die History-Spalten als NULL belassen.

Wäre das ein Unteranfrage-Vorfall? und wenn ja, wie fügt man diesen Typ von LIMIT hinzu?

    
coffeemonitor 23.01.2012, 19:57
quelle

2 Antworten

20

Dies ist das greatest-n-per-group Problem, das häufig bei Stack Overflow gestellt wird.

So würde ich es in Ihrem Szenario lösen:

%Vor%

Das heißt, dass mh die letzte Zeile in tbl_member_login_history für die angegebene Mitglied-ID sein soll. Wir suchen also nach einer anderen Zeile mh2 , die noch jünger ist. Wenn nicht aktueller als die Zeile mh gefunden wird, ist mh2.* NULL, also muss mh die letzte sein.

Ich gehe davon aus, dass diese Tabelle eine Primärschlüsselspalte enthält, die steigende Werte enthält. Für dieses Beispiel nehme ich an, dass der Spaltenname pk ist.

Wenn Sie LEFT OUTER JOIN für beide Verweise auf die Anmeldeverlaufstabelle verwenden, wird die Zeile m gemeldet, auch wenn keine übereinstimmende Zeile vorhanden ist.

    
Bill Karwin 23.01.2012, 20:05
quelle
0

füge das hinzu

%Vor%

PS. LAST_LOGIN_DATE ist eine Pseudospalte, Sie können Ihre restriktive Spalte versuchen

    
kochobay 23.01.2012 20:05
quelle