Django-Abfrage wählt nach Feldpaaren aus

8

Ich habe das Feld 'submission', das einen Benutzer und ein Problem hat. Wie kann ich ein SQL-Suchergebnis erhalten, das eine Liste von nur einem Ergebnis pro Benutzer-Problem-Paar gibt?

Modelle sind wie folgt:

%Vor%     
crodjer 14.08.2010, 12:38
quelle

2 Antworten

3

Update 2 :

(Nachdem ich die Kommentare von OP gelesen habe), empfehle ich, ein neues Modell hinzuzufügen, um die neueste Einreichung zu verfolgen. Nennen Sie es LatestSubmission .

%Vor%

Sie können dann entweder

  1. überschreiben Sie Submission.save() , um den Eintrag in LatestSubmission jedes Mal neu zu erstellen / zu aktualisieren, wenn ein Benutzer eine neue Lösung für ein Problem
  2. veröffentlicht
  3. fügen Sie eine Funktion hinzu, die dasselbe für ein geeignetes Signal tut.

so dass LatestSubmission eine Zeile pro Problem-Benutzer-Einreichungskombination enthält, die auf die letzte Einreichung des Problems durch jeden Benutzer verweist. Sobald Sie dies an Ort und Stelle haben, können Sie eine einzige Abfrage auslösen:

%Vor%

Aktualisieren :

Da das OP Beispielcode gepostet hat, kann die Lösung nun wie folgt geändert werden:

%Vor%

Ursprüngliche Antwort

Wenn keine datums- und zeitbasierten Kriterien für die Entscheidung "älter" oder "neuer" vorliegen, können Sie den Primärschlüssel ( id ) von Submission verwenden, um die alten zu vernachlässigen.

%Vor%     
Manoj Govindan 14.08.2010, 13:40
quelle
12

Versuchen Sie Folgendes:

%Vor%

Es wird Ihnen eine Liste von Diktaten wie diesem geben:

%Vor%

enthält alle eindeutigen Paare.

Es ergibt tatsächlich Ihre übliche SELECT DISTINCT SQL-Abfrage.

    
Tomek Kopczuk 14.08.2010 15:31
quelle

Tags und Links