用于获取多个值的 Django MySQL 不同查询
Posted
技术标签:
【中文标题】用于获取多个值的 Django MySQL 不同查询【英文标题】:Django MySQL distinct query for getting multiple values 【发布时间】:2012-09-06 08:15:15 【问题描述】:不幸的是,我有一个 MySQL 数据库与 Django 1.4.1 一起使用。 如果我做对了,不同的功能仅适用于 POSTGRESQL。
我必须让一个不同的查询由多个值组成,而只有一个不同的值,
喜欢; 这个适用于 POSTGRE 但不适用于 mysql, 我收到以下错误;
此数据库后端不支持 DISTINCT ON 字段
staff = Staff.objects.order_by('person__full_name').distinct('person__full_name')
然后我尝试了
staff = Staff.objects.values('person__full_name','staff_job_categories').distinct().order_by('person__full_name')
但我没有得到不同的价值观,因为我也得到了员工工作类别。但是当我不包含它时,我无法将它作为数组获取。
有什么想法吗?
【问题讨论】:
【参考方案1】:.distinct([*fields])
仅适用于 PostgresSQL。
来自distinct 文档
这就是区别。对于普通的 distinct() 调用,数据库在确定哪些行是不同的时比较每一行中的每个字段。对于具有指定字段名称的 distinct() 调用,数据库将仅比较指定的字段名称。
如上所述,检查记录中的所有字段。在您的情况下,您很可能会获得具有不同字段值的记录(如果您要查询多个表的 ManyToMany 或 ForeignKey 关系,则更有可能是这种情况)。
要合并为数组,您可以参考您之前的问题Django Query distinct values works but i cant use the query result
【讨论】:
【参考方案2】:names = Staff.objects.order_by('person__full_name').values('person__full_name').distinct()
会给你不同的全名,你可以做类似的事情来获得不同的工作类别。
这些将为您提供值列表,而不是对象本身,但如果我正确解释您的问题,那么我认为这些将为您提供您想要的。
【讨论】:
【参考方案3】:并非所有数据库都支持 Distinct('field name')。所以我们能做的就是使用非常简单的解题技巧
class vendor_ready_distinct(APIView):
def get(self, request):
obj_readyproduct = vendor_list_readyProduct.objects.all().order_by('mobile_number')
unique_list = []
list = []
for x in obj_readyproduct:
# check if exists in unique_list or not
if x.mobile_number not in list:
unique_list.append(x)
list.append(x.mobile_number)
seri_obj = vendor_list_readyProductSerializer(unique_list, many=True)
return Response(seri_obj.data)
这里我们使用geeksforgeeks中的方法1来获取不同的行
【讨论】:
【参考方案4】:如果您想将 DISTINCT 与 WHERE 语句一起使用,您可以使用此代码。
staff = Staff.objects.filter(person__full_name="Alex").values('staff_job_categories').distinct().order_by('person__full_name')
【讨论】:
以上是关于用于获取多个值的 Django MySQL 不同查询的主要内容,如果未能解决你的问题,请参考以下文章
Django Query 获取 ArrayField 列的所有不同值的计数