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

Django Zapytanie Natural Sortuj

O ile mi wiadomo, nie ma ogólnego rozwiązania tego problemu w Django. Możesz zmniejszyć zużycie pamięci i ograniczyć zapytania do bazy danych, tworząc strukturę wyszukiwania 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'])

Zakładając, że chcesz posortować wyniki na stronę, możesz następnie podzielić zamówione_kody_pytań, wykonać inne zapytanie, aby pobrać wszystkie potrzebne pytania, uporządkuj je zgodnie z ich pozycją w tym wycinku

#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])

Jeśli struktura wyszukiwania nadal zużywa zbyt dużo pamięci lub sortowanie trwa zbyt długo, będziesz musiał wymyślić coś bardziej zaawansowanego. To z pewnością nie skalowałoby się dobrze do ogromnego zestawu danych




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rekursywny wybór mysql?

  2. Ponowna próba zakleszczenia ActiveRecord3

  3. Jak całkowicie usunąć MySQL z plikami konfiguracyjnymi i bibliotekami?

  4. Jak zaprojektować kategorię i podkategorie w MySQL?

  5. Podziel stałą wartość na kraje na podstawie dziennego udziału w przychodach