Obtenir la fonctionnalité GROUP_CONCAT dans Django
En développant le concept de GROUP_CONCAT dans MySQL, Django propose une approche alternative pour obtenir des résultats similaires. Dans Django, GROUP_CONCAT peut être émulé grâce à l'utilisation d'une fonction d'agrégation personnalisée.
Création d'une fonction d'agrégation Concat :
from django.db.models import Aggregate class Concat(Aggregate): function = 'GROUP_CONCAT' template = '%(function)s(%(distinct)s%(expressions)s)' def __init__(self, expression, distinct=False, **extra): super(Concat, self).__init__( expression, distinct='DISTINCT ' if distinct else '', output_field=CharField(), **extra)
Avec cette fonction d'agrégation personnalisée, vous peut désormais effectuer des opérations GROUP_CONCAT dans les ensembles de requêtes Django.
Exemple Utilisation :
Considérons un tableau de fruits avec les données suivantes :
id | type | name |
---|---|---|
0 | apple | fuji |
1 | apple | mac |
2 | orange | navel |
Pour récupérer le nombre de différents types de fruits ainsi qu'une liste de leurs noms séparés par des virgules :
query_set = Fruits.objects.values('type').annotate(count=Count('type'), name = Concat('name')).order_by('-count')
Cet ensemble de requêtes renverra les résultats suivants :
type | count | name |
---|---|---|
apple | 2 | fuji,mac |
orange | 1 | navel |
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!