Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Django self join , Jak przekonwertować to zapytanie na zapytanie ORM

Łatwiej będzie Ci to zrobić dzięki bardziej znormalizowanemu modelowi danych. Rozważ zastosowanie takiego podejścia:

class NodeGroup(model.Model):
    pass

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

Wtedy możesz to zrobić:

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'))

Niestety w tym momencie zwrócone węzły będą miały duplikaty, jeśli więcej niż jeden węzeł ma tę samą wartość dla health_time . Możesz być w stanie dodać .distinct('node_group_id') to mogłoby to wyjaśnić, ale nie jestem w 100% pozytywny.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie LIKE MySQL z podkreśleniem

  2. Pokaż tabele indeksowane kolumny FULLTEXT

  3. Czy biblioteka PDO jest szybsza niż natywne funkcje MySQL?

  4. Czy połączenia SQL otwierane za pomocą PDO w PHP muszą być zamknięte?

  5. Jak utworzyć tabelę mysql z domyślną sygnaturą czasową kolumny current_date?