sql >> Database >  >> RDS >> Mysql

Django self join, Hoe deze query naar ORM-query te converteren?

U zult dit gemakkelijker kunnen doen met een meer genormaliseerd gegevensmodel. Overweeg een aanpak als deze te gebruiken:

class NodeGroup(model.Model):
    pass

class NodeHealth(model.Model):
    node_group = models.ForeignKey(NodeGroup, related_name='nodes')
    health_time = models.IntegerField()
    status = models.IntegerField()

Dan zou je dit kunnen doen:

from django.db.models import Max, F

nodes = NodeHealth.objects.all().annotate(
    max_health_time=Max('node_group__nodes__health_time')
).filter(health_time=F('max_health_time'))

Helaas zullen de geretourneerde knooppunten op dat moment duplicaten hebben als meer dan één knooppunt dezelfde waarde heeft voor health_time . U kunt mogelijk een .distinct('node_group_id') . toevoegen dat zou dat kunnen ophelderen, maar ik ben niet 100% zeker.



  1. MySQL invoegen vanuit de ene database in een andere

  2. Wat is er nieuw met MySQL-replicatie in MySQL 8.0

  3. PHP + MySQL:verschil tussen gebufferde en niet-gebufferde zoekopdrachten

  4. Berekeningen doen in MySQL versus PHP