2012-09-13 10 views
10

私はを持っていますDjango 1.4.1で残念ながら使用されているデータベース。 私はそれが正しいとすれば、Distinct関数はPOSTGRESQLのためだけに働いています。Django複数の値を取得するためのMySQLの別のクエリ

Iは、明確なクエリが複数の値で構成さだけ異なる1ながら

枚をしなければなりません。 これはPOSTGREでは動作しますが、MYSQLでは動作しません。 次のエラーが発生します。フィールドON DISTINCT

は、このデータベースバックエンド

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') 

を試してみましたが、私はまた、スタッフの職種を取得するので、私は個別の値を得ることはありません。しかし、私はそれを含んでいないとき、私は配列としてそれを得ることができませんでした。

答えて

16

.distinct([*fields])はPostgreSQLでのみ動作します。

distinctドキュメント

から、ここでは違いがあります。通常のdistinct()呼び出しの場合、データベースは、どの行が異なるかを判断するときに各行の各フィールドを比較します。指定されたフィールド名を持つdistinct()呼び出しの場合、データベースは指定されたフィールド名のみを比較します。

前述のように、レコードのすべてのフィールドがチェックされます。ほとんどの場合、異なるフィールド値を持つレコードを取得している可能性があります(複数のテーブルManyToManyまたはForeignKeyのクエリを照会する場合はそうです)。

あなたが参照できる配列として統合する以前の質問Django Query distinct values works but i cant use the query result

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

はあなたに明確な完全な名前を与えるだろう、とあなたは明確な職種を取得するために同様のことを行うことができます。

これらは、オブジェクト自体ではなく、値のリストを提供しますが、私があなたの質問を正しく解釈すれば、これらはあなたが望むものを与えると思います。

関連する問題