当我在mysql查询中使用ORDER BY时,它按数字的每个数字排序。
例如:在我的查询中使用正常的ORDER BY我得到了这个结果
101, 103, 104, 105, 12, 123, 125, 13, 131, 134
但我的要求是我应该得到这样的结果:
12, 13, 101, 103, 104, 105, 123, 125, 131, 134
我们怎么能在mysql查询中做到这一点。
Django查询示例:
Foo.objects.filter(
Q(m_number__icontains=(request.GET['term']))
).filter(
co_id = co_id,
is_active=1
).values(
'pk',
'm_name',
'm_number'
).order_by(
'm_number'
)
我如何在这里使用额外的?顺序应该适用于m_number列。
答案 0 :(得分:2)
您的数据很可能存储为文本而非数字。如果要强制执行正确的订单,可以使用... ORDER BY CAST(the_column AS UNSIGNED)
。但更好的解决方案最有可能只是转换列本身的类型。
答案 1 :(得分:1)
我同意viraptor的答案。
我假设你可以在Django中使用额外的:
Foo.objects.extra(select={ 'd_field' : 'cast(the_column AS UNSIGNED)' }).extra(order_by=['d_field'])
但是viraptor是对的,最好转换列本身的类型(否则,无论何时使用模型,你都必须记住相同的“hack”)
最终条款应如下所示:
Foo.objects.filter(
Q(m_number__icontains=(request.GET['term']))
).filter(
co_id = co_id,
is_active=1
).extra(
select={
'int_m_number': 'cast(m_number AS UNSIGNED)',
'pk': 'pk' ,
'm_number': 'm_number'
}
).extra(
order_by=['int_m_number']
)