2011-01-01 3 views
2

Dies sind die beiden Tabellen I zur Hand haben,benötigen aus einer Tabelle neuesten Instanzen eines Benutzers abzurufen

Herausforderungen

id | Name

Challenges_Users

user_id | challenge_id | gestartete_at | completed_at

jede Instanz in der challenges_users Tabelle ist eine Aufzeichnung der Benutzer eine Herausforderung und ihren Zustand (Staat auf der Grundlage der started_at und completed_at Zeitstempel)

auch zu akzeptieren, kann ein Benutzer mehrere Male eine Herausforderung annehmen (nicht gleichzeitig , aber kann es wieder nehmen, nachdem die erste Instanz abgeschlossen ist). So könnte die Tabelle für eine einzelne Herausforderung wie folgt aussehen.

id | challenge_id | gestarted_at | completed_at

2831 | 4 | 2010-12-23 00:00:00 | 2010-12-29 15:42:41

2834 | 4 | 2010-12-29 15:46:53 | NULL

Jetzt muss ich die Liste aller Herausforderungen aus der Challenges-Tabelle und ihren Status der neuesten Instanz aus der Challenges_users-Tabelle abrufen.

Staaten sind: , wenn keine Instanz für eine Herausforderung in challenges_users Tabelle => unstarted wenn completed_at null ist und started_at ist nicht null => läuft wenn completed_at nicht null und started_at ist nicht null =>

abgeschlossen

ich habe 2 Probleme:

  1. Wie ein einfach zu tun kommen, so dass alle Herausforderungen, die alle Instanzen für einen bestimmten user_id in challeges_users dont haben auch in der Ergebnismenge erhalten.

  2. Wie gebe ich ein Resultset zurück, so dass es nur einen Datensatz mit der neuesten gestarteten_at enthält.

Jede Hilfe wird sehr geschätzt. Vielen Dank! Hier

+0

Welche der drei Staaten sollte in der Ergebnismenge aufgenommen werden? –

Antwort

2

ist ein Schritt in der richtigen Richtung (ungetestet), wenn ich verstehe, was Sie zu tun versuchen:

SELECT C.ID, C.NAME, CU.USER_ID, CU.STARTED_AT 
FROM CHALLENGES AS C 
LEFT JOIN CHALLENGES_USERS AS CU 
ON CU.CHALLENGE_ID=C.ID 
    AND CU.STARTED_AT=(
    SELECT MAX(CU2.STARTED_AT) 
    FROM CHALLENGES_USER CU2 
    WHERE CU2.CHALLENGE_ID=C.CHALLENGE_ID) 
+1

das wird funktionieren, was Sie wollen. – dqhendricks

+0

arbeitete wie ein Charme! Vielen Dank und Entschuldigung für die verzögerte Antwort. –

Verwandte Themen