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

Django manytomany truy vấn hành vi kỳ lạ

Kể từ khi Subscription là một bảng thông qua cho mối quan hệ m2m giữa PostSubscriber , khi bạn đặt hàng trên một trường Subscription mô hình chính nó, tất cả các bài đăng xuất hiện dưới dạng các hàng riêng lẻ trong tập kết quả và đó là lý do tại sao bạn nhận được s_count=1 bởi vì mỗi bài đăng với một người đăng ký cụ thể là duy nhất.

Bạn cần chú thích Post các đối tượng có date_subscribed mới nhất của tất cả subscribers và sau đó đặt hàng trên trường được chú thích:

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

CẬP NHẬT cho câu hỏi tiếp theo:

Nếu bạn sử dụng count() nó sẽ trả về số lượng Posts . Bạn có thể thấy rằng nó sẽ khác với số lượng bạn nhận được từ len(queryset.values_list('s_count', 'subscription__date_subscribed')) bởi vì tại thời điểm này, các giá trị riêng lẻ cho ngày đã được tìm nạp trong tập kết quả.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự khác biệt giữa mysqli và mysql?

  2. Hạn chế về hiệu suất của Khóa chính tổng hợp trong MySQL

  3. GIỮA truy vấn sử dụng JDBC với MySQL

  4. Chuyển tiếp cổng Vagrant cho Mysql

  5. Lỗi phân đoạn trên MySQL2 / Ruby 1.9.3 / Rails 3.2