sql >> Database teknologi >  >> RDS >> Mysql

Django mange forespørger på mærkelig adfærd

Siden Subscription er en gennemgående tabel for m2m relation mellem Post og Subscriber , når du bestiller på et felt med Subscription selve modellen vises alle indlæg som individuelle rækker i resultatsættet, og det er derfor du får s_count=1 fordi hvert indlæg med en bestemt abonnent er unikt.

Du skal kommentere Post objekter med den seneste date_subscribed af alle subscribers og bestil derefter på annoteret felt:

posts = Post.objects.annotate(
            s_count=Count('subscribers'),
            s_date_max=Max('subscription__date_subscribed')
        ).order_by('-s_count', '-s_date_max')

OPDATERING til næste spørgsmål:

Hvis du bruger count() metoden returnerer antallet af Posts . Du kan se, at det vil afvige fra det antal, du får fra len(queryset.values_list('s_count', 'subscription__date_subscribed')) fordi på dette tidspunkt er de enkelte værdier for datoer hentet i resultatsættet.




  1. Kombiner flere unikke MySQL-tabeller og bestil efter én kolonne

  2. Sådan installeres sqlcmd &bcp på SUSE

  3. Konverter SQL Server DateTime-objekt til BIGINT (.Net-mærker)

  4. SQL-optimering - Sammenføj forskellige tabeller baseret på kolonneværdi