Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何获得按匹配属性数排序的查询行?_Mysql_Sql_Django_Django Queryset - Fatal编程技术网

Mysql 如何获得按匹配属性数排序的查询行?

Mysql 如何获得按匹配属性数排序的查询行?,mysql,sql,django,django-queryset,Mysql,Sql,Django,Django Queryset,我有两个模型/表A和Property属性与属性有多对多关系。A有一个字段SomeName,Property也有一个字段Value 通过我的应用程序,我收到一个值列表。现在,我想从发送列表中检索至少有一个值的A行,但我还想根据列表中存在的属性的数量对这些行进行排序 例如,M、N和O是模型A的三个对象。M具有特性P1、P2、P3,N具有特性P2、P3、P4,O具有特性P3。我收到一个值P2、P4的列表。现在,我想要的结果查询集是,如果SomeName是模型A的字符串表示形式 Django代码是首选,

我有两个模型/表
A
Property
<代码>属性与
属性有多对多关系。A有一个字段
SomeName
Property
也有一个字段
Value

通过我的应用程序,我收到一个
值列表
。现在,我想从发送列表中检索至少有一个
值的
A
行,但我还想根据列表中存在的
属性的数量对这些行进行排序

例如,M、N和O是模型A的三个对象。M具有特性P1、P2、P3,N具有特性P2、P3、P4,O具有特性P3。我收到一个值P2、P4的列表。现在,我想要的结果查询集是
,如果
SomeName
是模型A的字符串表示形式


Django代码是首选,但SQL也足够了。

感觉需要。假设
A
是模型,
value
Properties
中的字段。
M2MField
也是
A
Property
中的
Many2Many
字段

A.objects.filter(M2MField__Values__in=[list that you have]).annotate(c=Count('M2MField')).order_by('c') #-c for descending order.

感觉你需要。假设
A
是模型,
value
Properties
中的字段。
M2MField
也是
A
Property
中的
Many2Many
字段

A.objects.filter(M2MField__Values__in=[list that you have]).annotate(c=Count('M2MField')).order_by('c') #-c for descending order.

你尝试了什么?@arie还没能解决它。我认为这不值得投反对票。@RahulSarma希望我能帮上忙。:)@RahulSarma-你能提供你桌子的结构吗?@RamMehta我已经在上面做了。
A
表有一列
SomeName
,属性表有一列
Value
。当然,对于多对多关系,将有一个中间表,但如果您使用的是django,则不必提及。您尝试了什么?@arie无法解决它。我认为这不值得投反对票。@RahulSarma希望我能帮上忙。:)@RahulSarma-你能提供你桌子的结构吗?@RamMehta我已经在上面做了。
A
表有一列
SomeName
,属性表有一列
Value
。当然,对于多对多关系,将有一个中间表,但如果您使用的是django.Fantastic,则不必提及。成功了。只需将其编辑为包含来自django.db.models import Count的
,我再次使答案不被接受,因为在您的结果中,您正在计算对象
A
拥有的属性总数并对查询集进行排序,而我希望根据用户提交的列表中存在的对象
A
拥有的属性数对查询集进行排序。如果你能编辑你的答案,我会恢复状态。太棒了。成功了。只需将其编辑为包含来自django.db.models import Count的
,我再次使答案不被接受,因为在您的结果中,您正在计算对象
A
拥有的属性总数并对查询集进行排序,而我希望根据用户提交的列表中存在的对象
A
拥有的属性数对查询集进行排序。如果您可以编辑您的答案,我将恢复状态。