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

SQL Procédural MySQL Discussion :

Procédure stockée à partir d'une requête


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Par défaut Procédure stockée à partir d'une requête
    Bonjour j'ai une procédure stockée à réaliser sur un projet et je ne suis pas très calé là-dessus.

    J'ai fais ma requête SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT nom, prenom,COUNT(*) AS NbFacture
    FROM users
    INNER JOIN facture ON users.id= facture.idUser
    GROUP BY nom;

    Cette requête liste les utilisateurs avec le nombre de facture qu'ils ont crée.

    J'aimerai faire ça en procédure stockée

    Merci d'avance pour vos réponses

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Votre requête est incorrecte.
    Si vous avez deux frères parmi vos clients, l'un recevra les factures de l'autre !

    il vous faut donc grouper sur users.id (ou sur nom ET prenom)

    pour ce qui est de la procédure stockée, un peu de lecture : http://jcrozier.developpez.com/tutor...-mysql-mysqli/

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Par défaut suite
    J'ai fais :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $dbh = new PDO('mysql:host=localhost;dbname=facturation','root',''); 
    $maproc = "CALL verifQuotas()"; 
    $appelSP = $dbh->prepare($maproc); 
    $appelSP->execute(); 
    while($row = $appelSP->fetchAll(PDO::FETCH_ASSOC))  print_r($row);

    J'ai l'affichage : Array([nom]=>'MACHIN'....)

    J'ai essayé de faire un à la place du pour avoir tous les noms mais il me dit que la variable n'est pas définie

  4. #4
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    salut,

    montre ce que tu as écrit comme procédure... sinon ça va être dure de répondre...

    sinon, il vaut mieux activer la bufferisation de résultats avec les procédures vu que tu peux avoir plusieurs select servant à l'affichage dedans parfois...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 15
    Par défaut
    Bonjour


    Voici ma procédure stockée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BEGIN
    SELECT nom, prenom, COUNT(*) AS NbFacture
    FROM users
    INNER JOIN facture ON users.id = facture.idUser
    GROUP BY users.id;
    END
    J'ai juste imbriqué ma requête dans une procédure.

    Comme dit plus haut, cette procédure me permet de lister les utilisateurs avec le nombre de factures qu'ils ont crée ; cela me permet de gérer les quotas (c'est un mini projet)

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Bonjour,

    tu utilise la méthode fetchAll() dans une boucle while ce qui n'est pas correct,

    fetchAll() : Renvoi un tableau contenant des tableau, chaque sous-tableau contient un enregistrement.

    Donc si tu utilise fetchAll() il faut que tu fasse :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $users = $appelSP->fetchAll(PDO::FETCH_ASSOC);
     
    foreach($users as $user){
        echo $user['nom'];
    }

    sinon tu utilise une boucle while() mais il faut utiliser la méthode fetch():
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while($user = $appelSP->fetchAll(PDO::FETCH_ASSOC)){ //Erreur
     
    while($user = $appelSP->fetch(PDO::FETCH_ASSOC)){
        echo $user['nom'];
    }

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/09/2010, 17h25
  2. Réponses: 11
    Dernier message: 03/06/2010, 10h39
  3. Réponses: 0
    Dernier message: 11/09/2009, 18h25
  4. Réponses: 2
    Dernier message: 17/03/2009, 09h33
  5. Réponses: 3
    Dernier message: 10/04/2007, 13h53

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