Je Django en utilisant le modèle suivant avec Django:reformulant « SELECT DISTINCT ON ... » en utilisant ORM
class Hit(Model):
image = ForeignKey(Image)
user = ForeignKey(User)
timestamp = DateTimeField(auto_now_add = True)
Ce que j'ai besoin est essentiellement une liste qui contient le nombre des « premiers hits » (c.-à-coups sans horodatage antérieur pour la même image) pour chaque utilisateur de créer une sorte de liste de classement.
Ou encore plus facile, juste une liste qui contient un nom d'utilisateur une fois pour chaque fois que cet utilisateur a fait un "premier coup".
Dans SQL en utilisant PostgreSQL "DISTINCT ON" extension, ce serait une simple requête comme:
SELECT DISTINCT ON (image_id) user_id FROM proj_hit ORDER BY image_id ASC, timestamp ASC;
Il y une certaine façon, pour obtenir ce résultat avec ORM de Django ou (au moins) SQL portable, c'est-à-dire pas d'extensions PostgreSQL?
J'ai peut-être mal compris votre question, mais une liste de tous les «premiers succès» serait-elle un bon point de départ? À partir de là, vous pouvez obtenir une liste de tous les utilisateurs responsables des hits, car chaque hit fait référence à un seul utilisateur. –
Oui, une liste de tous les premiers hits devrait suffire. De là, je peux faire une jointure pour obtenir les utilisateurs, puis le regroupement habituel et l'agrégation COUNT pour obtenir le nombre de premiers hits par utilisateur. Mais comment puis-je obtenir une liste de tous les premiers hits? J'y ai réfléchi les dernières heures mais je n'arrive pas à comprendre. Peut-être que je ne suis pas assez expérimenté avec la façon de penser de Django ORM. PS: Merci d'avance! – ChrisM