用于获取多个值的Django MySQL独特查询

时间:2012-09-13 09:07:10

标签: python mysql django distinct django-queryset

我有一个 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')

但我没有得到明确的价值观,因为我也得到了员工职位类别。但是当我不包含它时,我无法将其作为数组。

有什么想法吗?

2 个答案:

答案 0 :(得分:17)

.distinct([*fields])仅适用于PostgresSQL。

来自distinct文档

这是区别。对于正常的distinct()调用,数据库在确定哪些行是不同的时比较每行中的每个字段。对于具有指定字段名称的distinct()调用,数据库将仅比较指定的字段名称。

如上所述,检查记录中的所有字段。在您的情况下,您很可能获得具有不同字段值的记录(如果您查询多个表ManyToMany或ForeignKey关系,则更有可能出现这种情况)。

要合并为数组,您可以参考之前的问题Django Query distinct values works but i cant use the query result

答案 1 :(得分:5)

names = Staff.objects.order_by('person__full_name').values('person__full_name').distinct()

会为您提供不同的全名,您可以做类似的事情来获得不同的职位类别。

这些将为您提供值列表,而不是对象本身,但如果我正确地解释您的问题,那么我认为这些将为您提供您想要的内容。