Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Django tự tham gia, Cách chuyển đổi truy vấn này thành truy vấn ORM

Bạn sẽ dễ dàng thực hiện việc này hơn với một mô hình dữ liệu chuẩn hóa hơn. Cân nhắc sử dụng cách tiếp cận như sau:

class NodeGroup(model.Model):
    pass

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

Sau đó, bạn có thể làm điều này:

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

Thật không may tại thời điểm đó, các nút được trả về sẽ có các bản sao dựa trên nếu nhiều nút có cùng giá trị cho health_time . Bạn có thể thêm .distinct('node_group_id') điều đó có thể làm sáng tỏ điều đó, nhưng tôi không khẳng định 100%.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL InnoDB - Nhầm lẫn về giao dịch

  2. Mysql Left Join Null Kết quả

  3. PHP mysql_connect đặt wait_timeout

  4. MySQL gặp sự cố (Một số con trỏ có thể không hợp lệ và khiến kết xuất bị hủy bỏ)

  5. Phát hiện ký tự bị hỏng utf8 trong MySQL