IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Doctrine2 PHP Discussion :

Alias sur count() dans le QueryBuilder


Sujet :

Doctrine2 PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 59
    Points
    59
    Par défaut Alias sur count() dans le QueryBuilder
    Bonjour,

    je débute avec Doctrine et son QueryBuilder et pour des requêtes statistiques où je n'ai pas besoin de récupérer des Entities mais des chiffres j'aimerais transposer une requête SQL vers le QueryBuilder. Voici la structure simplifiée d'une table "game_summoner" :

    game_summoner
    => id
    => summoner_id
    => win
    => champion_id

    et la requête SQL fonctionnelle (en MySQL) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT champion_id, sum(win) as wins, count(*) as nb FROM  game_summoner WHERE summoner_id = ? GROUP BY champion_id order by nb desc limit ?;";
    Le but de la requête est d'avoir dans la table game_summoner la liste des champion_id agrégés et ordonnés par la somme de la colonne win pour un summoner_id.

    Là où j'ai notamment des difficultés est comment donner un alias dans le select à la fonction de comptage count, alias que je réutilise dans le order by. Si vous avez un début de piste sur comment créer et utiliser ces alias sur des fonctions d'aggrégations avec le QueryBuilder je suis preneur d'un coup de pouce.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    De mémoire SUM n'est pas implémenté avec le query builder :/ edit: fatigué xD
    tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ->select('count(win) as wins')

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 59
    Points
    59
    Par défaut
    Salut, merci de ta réponse. Je m'en suis sorti en faisant ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		$qb = $this->em->createQueryBuilder();
    		$qb->select('gs.championId as championId, count(gs.id) as nb, sum(gs.win) as wins');
    		$qb->from(':GameSummoner','gs');
    		$qb->leftJoin('gs.game', 'g');
    		$qb->where('gs.summoner=:summonerID');
    		$qb->setParameter('summonerID', $summonerID);
    		$qb->add('groupBy', 'gs.championId');
    		$qb->add('orderBy', 'nb DESC');

Discussions similaires

  1. [MySQL] aide sur intégration fonction count dans requete foreach
    Par tilou67 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 01/04/2010, 22h48
  2. Critère sur Count dans une Requête Croisée
    Par Nana35 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 03/12/2008, 11h46
  3. Réponses: 1
    Dernier message: 28/03/2007, 12h23
  4. condition sur count(*) dans mysql
    Par arizona_dream dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/09/2005, 09h06
  5. [VB6] [MSHFlexGrid] Tri sur clic dans la première ligne
    Par degreste dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 06/03/2003, 00h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo