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

Laravel PHP Discussion :

Query Buider SelectRaw et SUM (Laravel 5.7) [5.6]


Sujet :

Laravel PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Février 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Février 2020
    Messages : 8
    Points : 9
    Points
    9
    Par défaut Query Buider SelectRaw et SUM (Laravel 5.7)
    Bonjour,
    Il y a une requête que je n'arrive pas à formuler et j'ai plutôt l'impression que cela vient de Laravel ...
    Si quelqu'un à des informations ????

    Pour être plus clair, voici la requête mysql :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT
    P1.nom_produit,
    P1.surface,
    SUM(tableA.quantite)
    FROM tableA
    RIGHT JOIN tableP AS P1 ON tableA.idtableP=P1.id
    WHERE tableA.idtableP=9

    (lorsque idtableP de la tableA est égal à 9
    je veux le nom du produit, le surface et la somme des quantités (dans tableA.)

    Du coté de Laravel, il y a une particularité : J'utilise la méthode 'on' pour la connexion à la BD (car la BD utilisée dépend de l'utilisateur)
    Voici le code qui ne fonctionne pas et c'est à cause du SUM()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $tb=Matable::on($currentBD)
    ->selectRaw('P1.nom_produit,P1.surface, SUM(tableA.quantite) ')
    ->rightJoin('tableP AS P1','tableA.idtableP','=','P1.id')
    ->where('tableA.idtableP',9)
    ->get();
    Est-ce que quelqu'un à une idée de la ou ça coince ??
    Merci par avance

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Bonjour, cela manque de group by, vous êtes sur que la première passe ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Les alias de jointure sont effectivement utile en sql.
    Mais par expérience sur Laravel je préfère conserver les intitulés de table (cela donne une meilleur visibilité sur la collection).

    Ceci devrais le faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $tb=Matable::on($currentBD)
    ->rightJoin('tableP','tableA.idtableP','=','tableP.id')
    ->select(['tableP.nom_produit','tableP.surface'])
    ->selectRaw('SUM(tableA.quantite) ')
    ->where('tableA.idtableP',9)
    ->get();
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $tb=Matable::on($currentBD)
    ->select(['tableP.nom_produit','tableP.surface', DB:raw('SUM(tableA.quantite)')])
    ->rightJoin('tableP','tableA.idtableP','=','tableP.id')
    ->where('tableA.idtableP',9)
    ->get();
    Si tu as toujours un problème retourne nous le message d'erreur.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Février 2020
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Février 2020
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Bonjour,
    En partant des 2 propositions fournies par TheWebBeginner (et en ajustant la 2nde DB::raw en DB sur la connection en cours)
    Une erreur un peu plus parlante est apparue et MaitrePylos l'avait vu arriver ...
    Syntax error or access violation: 1140 In aggregated query without GROUP BY
    Donc : Ajout d'un GROUP BY.
    Ce qui nous donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $tb=Matable::on($currentBD)
    ->rightJoin('tableP','tableA.idtableP','=','tableP.id')
    ->select(['tableP.nom_produit','tableP.surface'])
    ->selectRaw('SUM(tableA.quantite) ')
    ->where('tableA.idtableP',9)
    ->groupBy('tableP.nom_produit')
    ->get();
    Et ça fonctionne, Merci à MaitrePylos et TheWebBeginner,
    Résolu !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [5.1] Requête et sous requête avec query builder et laravel
    Par PIEPLU dans le forum Laravel
    Réponses: 1
    Dernier message: 01/11/2015, 13h28
  2. Laravel - query builder - sous requete dans la meme table
    Par yataglanzy dans le forum Laravel
    Réponses: 5
    Dernier message: 31/10/2015, 11h42
  3. Tutoriel query Sum()
    Par tarmo57 dans le forum Débuter
    Réponses: 1
    Dernier message: 19/07/2008, 20h14
  4. [QUERY] SUM d'un COUNT
    Par Fabouney dans le forum Requêtes
    Réponses: 1
    Dernier message: 04/02/2008, 21h20
  5. Query, sum over fields that have the same ID as the active field
    Par piers dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 28/04/2007, 11h33

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