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

PHP & Base de données Discussion :

problème requete 2 tables [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 42
    Par défaut problème requete 2 tables
    Bonjour,

    J'ai deux tables mysql

    t_indep : id_indep, nom, prenom, date, abandon(type date), echu(type date), mes_add

    t_coaching : id_coaching, ref_indep, coach, duree, resume, pointmes

    J'aimerais faire une nombre qui me retourne le nombre de personnes qui ont quelque chose d'autre que 0000-00-00 dans abandon et echu (t_indep), et qui on un nombre plus grand que 299 dans pointmes (t_coaching).

    Voici mon code :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php 
     
        // Requête 
        $presttotalementutil = mysql_query( "SELECT * FROM t_indep, t_coaching WHERE id_indep=ref_indep AND echu != '0000-00-00' AND abandon != '0000-00-00' AND (pointmes > '299')") or die (mysql_error());
     
        // Récupération du nombre d'enregistrements 
        $nbrperstotaluse = mysql_num_rows( $presttotalementutil ); 
     
        // Affichage du nombre de membres 
        echo 'Prestation totalement utilisé : ' , $nbrperstotaluse, ($nbrperstotaluse > 1 ? '' : '' ); 
        echo "<br />\n";   
    ?>

    Le resultat me retourne 0, or je sais qu'il y en a...

    Merci de votre aide

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Bonjour

    Si tu veux uniquement récupérer le nombre, autant utiliser COUNT() qui va compter à ta place. Pour la jointure, JOIN ON est plus élégant mais a priori le problème ne vient pas de là.
    En revanche, je pense que pointmess est un nombre, donc il n'y a pas debesoin de '' autour de la valeur.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select count(*) as nbrperstotaluse
      from t_indep join t_coaching on id_indep = ref_indep
      where pointmess > 299
        and echu != '0000-00-00'
        and abandon != '0000-00-00'
    Pour récupérer le résultat :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        // Requête 
        $rq_presttotalementutil = "select count(*) as nbrperstotaluse  from t_indep join t_coaching on id_indep = ref_indep where pointmess > 299 and echu != '0000-00-00' and abandon != '0000-00-00'" ;
        $presttotalementutil = mysql_query( $rq_presttotalementutil  ) or die ("requete : $rq_presttotalementutil , erreur : ".mysql_error());
     
        // Récupération du nombre d'enregistrements 
        $datapresttotalementutil  = mysql_fetch.assoc( $presttotalementutil ); 
        $nbrperstotaluse = $data['nbrperstotaluse'];
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 42
    Par défaut
    Salut, merci pour ta réponse.

    En fait j'ai remarqué que j'ai oublié quelque chose...

    Comme une personne peut avoir plusieurs coaching, elle a plusieurs nombre sous pointmes. Il faut donc avant que je calcule le total de pointmes.

    Je me suis pris comme ca :

    1. Je selectionne toutes les id des personnes qui ont quelque chose d'autre que 0000-00-00 dans abandon et echu (t_indep).

    Je retourne leur id

    2. Je fais la somme du champs pointmes pour toutes ces id

    3. Je fais une requete qui compte le nombre de personnes qui ont plus de 300 dans le resultat 2.

    code :

    1:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     <?php
    /* RECHERCHE DES ID DES PERSONNES ARCHIVEES */
    $rqtarchive = mysql_query("SELECT * FROM t_indep WHERE abandon != '0000-00-00' OR echu != '0000-00-00'") or die (mysql_error());
     
    while(list($id_indep)=mysql_fetch_array($rqtarchive)) {
     
    $id_indeparch = $id_indep;
    }
    ?>

    2.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
     
    /* Calcul du nombre de MES utilisé pour tous les archivés */
     
    $reqtotmesenl = mysql_query("SELECT SUM(pointmes) AS mes_enlever FROM t_coaching, t_indep WHERE ref_indep=id_indep AND id_indep=".'id_indeparch'."") or die (mysql_error());
     
    $restotmesenl=mysql_fetch_array($reqtotmesenl);
     
    $enlever=$restotmesenl[mes_enlever];
     
    ?>

    3. Ben la je ne sais pas trop comment m'y prendre...

    Y me semble que j'ai déjà une problème dans mon code 1, car si je fais un echo $id_indeparch dans ma boucle while, il me retourne toutes mes id, mais si je fais en dehors de la boucle il ne m'en retourne qu'une...

    Si quelqu'un voit une autre manière d'arriver a mon résultat je suis ouvert

    merci d'avance

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Bon, alors si j'ai bien compris, tu veux les gens (id_indep) qui ont des valeurs non nulles dans echo et abandon et un total de pointmess sur l'ensemble de leur coaching supérieur à 299.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select id_indep, SUM(pointmess) as total_pointmess
      from t_indep 
        join t_coaching on id_indep = ref_indep
      where echu != '0000-00-00'
        and abandon != '0000-00-00'
      group by id_indep
      having SUM(pointmess) > 299
    Bon c'est sans doute un peu tordu. Pour utiliser ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $rq = "select id_indep, SUM(pointmess) as total_pointmess  from t_indep    join t_coaching on id_indep = ref_indep  where echu != '0000-00-00' and abandon != '0000-00-00' group by id_indep having SUM(pointmess) > 299";
     
    $res = mysql_query ($rq) or die("requete : $rq , erreur : ".mysql_error());
    $nb_res = mysql_num_rows($res);
    echo $nb_res;
     
    //pour verification, tu peux afficher les resultats
    while ($data =mysql_fetch_array($res)){
       echo " id : $data['id_indep'], pointmess : $data['total_pointmess'] <br/>";
    }
    En espérant que ça fonctionne !
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 42
    Par défaut
    Arg ca me retourne 0 ...

    En fait ce que je veux, c'est que ca me retourne le nombres de personnes qui ont abandon OU echu non null et qui ont plus que 299 au total de leurs champs pointmes.

    tu vois un peu pret?

    c'est pour cela qu'il faut joindre les deux tables, dans un premier temps selectionner les personnes qui ont null sous abandon ou sous echu et dans un second temps, faut leur total de pointmes, puis dans un troisieme temps retourner le nombre de personne qui ont plus de 299 à ce total.

    Si c'est possible de faire ca en une seul requete ca m'arrangerai c'est clair, mais sinon c'est pas un problème ^^

    merci

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Ben, alors dans ma requête, il faut remplacer le AND dans le WHERE par un OR
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT id_indep, SUM(pointmess) AS total_pointmess
      FROM t_indep 
        JOIN t_coaching ON id_indep = ref_indep
      WHERE echu != '0000-00-00'
        or abandon != '0000-00-00'
      GROUP BY id_indep
      HAVING SUM(pointmess) > 299
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 42
    Par défaut
    honte à moi j'avais meme pas vu ca lol

    Merci beaucoup pour ton aide, ca marche impec

  8. #8
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    tant mieux !
    N'oublie pas
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 42
    Par défaut
    encore une question rapide

    Si je cherche entre 1 et 299

    je met HAVING SUM(pointmess) > 1 AND < 299 ?

    merci

  10. #10
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Utilise plutot between (entre)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    having sum(pointmess) between 1 and 299
    Attention les 2 bornes sont incluses dans l'intervalle.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 42
    Par défaut
    ok merci

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

Discussions similaires

  1. [MySQL] Problème requete 2 tables
    Par piero53 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/06/2009, 17h54
  2. Problème requete insert et table en read Only
    Par cilies38 dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/05/2009, 21h51
  3. problème requete imbriqué sur une seule table
    Par vanhouten dans le forum Langage SQL
    Réponses: 7
    Dernier message: 30/01/2009, 16h35
  4. Problème requete sur plusieurs tables
    Par sigmoun dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/01/2009, 00h32
  5. [MySQL] Problème requete SQL sur plusieurs tables
    Par Tiib_CD dans le forum Langage SQL
    Réponses: 30
    Dernier message: 21/12/2006, 16h52

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