Mysql如何判断多列组合起来不重复

Mysql下的判断

我最近再做一个Django页面,这个页面主要是展现“攻防演习”的一个细节,判断攻击方一共攻击了多少个场景,如图:
akb48

可见practice_sceneapp都不同才能算是一个不同的场景,如果他俩相同就是同一个场景,因为攻击方是可以重复攻击同一个场景的。那么如何输出practice_sceneapp都不同的列?

写法很简单:SELECT * FROM naxxramas_cappractice where bluearmy_id =6 GROUP BY practice_scene, app ORDER BY id DESC,效果如图:
akb48

可见practice_sceneapp相同的列已经整合成一个,只暴露了ID比较靠前的那一行。

而现在我想要得到的是行数,那就SELECT count(*) FROM naxxramas_cappractice where bluearmy_id = 6 GROUP BY practice_scene, app ORDER BY id DESC吧,很不幸,答案是错的,如图:
akb48

可见这样是把每一个类型的行数输出了,而我想要的只是一个3,怎么办?

答案是:SELECT count(DISTINCT app,practice_scene) FROM naxxramas_cappractice where bluearmy_id =6; 就搞定了,如图:
akb48

Django 里的判断

Django的views.py如何通过models来得到上面的“3”呢?如果是Django 1.X的话,可以使用CAPPractice.objects.filter(bluearmy_id = 6).distinct('practice_scene, app') 或者是 CAPPractice.objects.values('Category').distinct()。(CAPPractice是naxxramas_cappractice对应的model)

但是这个方法在2.2里已经不能使用了,会爆django.db.utils.NotSupportedError: DISTINCT ON fields is not supported by this database backend,这里我们改一下,CAPPractice.objects.filter(bluearmy_id=6).values('app', "practice_scene").distinct().count() 就好了,然后直接在前端页面直接引用变量即可。

参考资料

https://stackoverflow.com/questions/3852104/select-distinct-individual-columns-in-django
https://www.cnblogs.com/cpl9412290130/p/11777633.html
https://blog.csdn.net/qq_36815739/article/details/83624100

akb48

感谢您请我喝咖啡~O(∩_∩)O,如果要联系请直接发我邮箱chenx1242@163.com,我会回复你的
-------------本文结束感谢您的阅读-------------