sql >> Databáze >  >> RDS >> Mysql

Django Query Natural Sort

Pokud je mi známo, neexistuje na to obecné řešení Django. Můžete snížit využití paměti a omezit dotazy db vytvořením vyhledávací struktury 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'])

Za předpokladu, že chcete stránkovat výsledky, můžete pak rozdělit order_question_codes, provést další dotaz, abyste získali všechny otázky, které potřebujete, seřaďte je podle jejich pozice v daném řezu

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

Pokud vyhledávací struktura stále používá příliš mnoho paměti nebo trvá příliš dlouho, než se třídí, budete muset přijít s něčím pokročilejším. To by se určitě nedalo dobře škálovat na obrovský soubor dat




  1. cakephp uložit aktualizační data ze staré hodnoty dat + nové hodnoty

  2. Jak zkontrolovat databázi a v důsledku toho zkontrolovat přepínač?

  3. Mohu provést více dotazů oddělených středníkem pomocí MySQL Connector/J?

  4. ckfinder php 2.6.2 nastavení zobrazení, zobrazení, řazení nefunguje