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

Truy vấn Django Sắp xếp tự nhiên

Theo như tôi biết thì không có giải pháp Django chung cho vấn đề này. Bạn có thể giảm mức sử dụng bộ nhớ và giới hạn các truy vấn db của mình bằng cách xây dựng cấu trúc tra cứu id / question_code

from natsort import natsorted
question_code_lookup = Question.objects.values('id','question_code')
ordered_question_codes = natsorted(question_code_lookup, key=lambda i: i['question_code'])

Giả sử bạn muốn phân trang các kết quả, sau đó, bạn có thể chia nhỏ các mã lệnh_question_codes, thực hiện một truy vấn khác để truy xuất tất cả các câu hỏi bạn cần, sắp xếp chúng theo vị trí của chúng trong phần đó

#get the first 20 questions
ordered_question_codes = ordered_question_codes[:20]
question_ids = [q['id'] for q in ordered_question_codes]
questions = Question.objects.filter(id__in=question_ids)
#put them back into question code order
id_to_pos = dict(zip((question_ids), range(len(question_ids))))
questions = sorted(questions, key = lambda x: id_to_pos[x.id])

Nếu cấu trúc tra cứu vẫn sử dụng quá nhiều bộ nhớ hoặc mất quá nhiều thời gian để sắp xếp, thì bạn sẽ phải tìm ra thứ gì đó nâng cao hơn. Điều này chắc chắn sẽ không mở rộng thành một tập dữ liệu khổng lồ




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Vấn đề về dấu đầu ra JSON

  2. Chạy tổng cho nhiều danh mục trong MySQL

  3. Truy vấn MySQLdb tới mảng Numpy

  4. Chỉ trả lại các hàng có giá trị tối đa nhỏ hơn giá trị đã chỉ định

  5. Giá trị tối thiểu và tối đa của Mysql và ngày tương ứng cho mỗi tháng