Requête avec conditions dans des tables differentes (complexes)

Résolu/Fermé
guedo Messages postés 77 Date d'inscription mercredi 26 novembre 2014 Statut Membre Dernière intervention 10 avril 2019 - 2 févr. 2015 à 09:30
guedo Messages postés 77 Date d'inscription mercredi 26 novembre 2014 Statut Membre Dernière intervention 10 avril 2019 - 5 févr. 2015 à 15:43
Bonjour a tous si je poste ce message aujourdh'ui et que je solicite votre aide c'est que j'en ai besoin pour mon travail étant en alternance mais sans tuteur (j'espere que vous pourrez en faire l'office :p).
Voici deux tables de ma base de données la premiere 'utilisateur':


qui contient des utilisateur qui appartiennent a different groupe

et la table 'rdv'


qui contient des rendez-vous pris enregister avec un id d'utilisateur, mais il a également un statut (ABSENT CONFIRMER ATTENTE ANNULER BIDON),

j'aimerais maintenant faire un tableau de ce type:

Utilisateur [ ABSENT [ CONFIRMER [ ATTENTE [ ANNULER [ BIDON [ SIGNER[
__________________________________________________________
user1 [nb rdv [ nb rdv [ nb rdv [ nb rdv [ nb rdv [ nb rdv
__________________________________________________________
user2 [nb rdv [ nb rdv [ nb rdv [ nb rdv [ nb rdv [ nb rdv

les 'nb rdv' correspondent aux nombres de ligne ou l'utilisateur 1 a un rdv classes ABSENT ou CONFIRMER etc ..

Moi de mon coté je pensais faire une premiere requete ou je selectionne l'identifiant dans la table 'utilisateur' ou le groupe est TELEPRO comme ceci:

SELECT 'id' FROM utilisateur WHERE 'groupe' LIKE $groupe
(le $groupe est recuperer dans mon code déjà)

puis dans un if ou un for each refaire une requete de type

SELECT COUNT(*) FROM rdv WHERE 'IDTEL' LIKE '$id'
($id qu'on aura récuperer dans la requete precedente)

le probleme c'est comment les classés par leurs états puis les affiches dans un tableau.
J'utilise la class_PDO pour mes requetes que je met dans des fonctions.

4 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
2 févr. 2015 à 11:44
Bonjour,

Oriente toi vers les JOINTURE.

un truc du genre :
SELECT ,U.id
            ,U.groupe
            ,R.ETAT
            ,COUNT(R.ETAT) as NB_RDV
FROM rdv R
LEFT JOIN utilisateur U ON R.IDTEL = U.id
GROUP BY U.id,R.ETAT
ORDER BY U.groupe,U.id,R.ETAT


Testes cette requête en direct dans ta BDD et regardes ce que ça te donne
https://codes-sources.commentcamarche.net/faq/10778-heidisql-tester-ses-requetes-sql

1
guedo Messages postés 77 Date d'inscription mercredi 26 novembre 2014 Statut Membre Dernière intervention 10 avril 2019 1
2 févr. 2015 à 11:51
Requête SQL : Documentation


SELECT ,U.id
,U.groupe
,R.ETAT
,COUNT(R.ETAT) as NB_RDV
FROM rdv R
LEFT JOIN utilisateur U ON R.IDTEL = U.id
GROUP BY U.id,R.ETAT
ORDER BY U.groupe,U.id,R.ETAT
LIMIT 0, 25


MySQL a répondu: Documentation

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'U.id
,U.groupe
,R.ETAT
,COUNT(R.ETAT) as NB_' at line 1

    
0
guedo Messages postés 77 Date d'inscription mercredi 26 novembre 2014 Statut Membre Dernière intervention 10 avril 2019 1
2 févr. 2015 à 11:53
en faites je l'ai balancé comme ca la requête je t'ai pas demander s'il fallait que je change les U en utilisateur et les R en rdv qui sont les noms de mes tables ou si tu l'avais fait expres
0
guedo Messages postés 77 Date d'inscription mercredi 26 novembre 2014 Statut Membre Dernière intervention 10 avril 2019 1
2 févr. 2015 à 11:55
PS je suis sur phpMyadmin en localhost pour l'instant donc je test dans l'onglet SQL
0
guedo Messages postés 77 Date d'inscription mercredi 26 novembre 2014 Statut Membre Dernière intervention 10 avril 2019 1
2 févr. 2015 à 11:56
Merci pour ton aide déjà pour commencer (j'arrête d'envoyer plusieurs messages a partir de maintenant comme si que c'était des SMS lol)
0
guedo Messages postés 77 Date d'inscription mercredi 26 novembre 2014 Statut Membre Dernière intervention 10 avril 2019 1
2 févr. 2015 à 12:45
jordane45 j'ai essayer de faire quelque modification pour enlever mon erreur de syntaxe mais je n'y parvient pas sur phpMyAdmin l'erreur reste la même et sur le logiciel que tu m'as joint dans ta réponse j'avais de base la même erreur puis en cochant dans les option a droite de la ou tu saisi la requête j'ai coché les options "profil requête" et "paramètres de liaisons et sa m'as répondu

SET profiling=1;
SELECT ,U.id
,U.groupe
,R.ETAT
,COUNT(R.ETAT) as NB_RDV
FROM rdv R
LEFT JOIN utilisateur U ON R.IDTEL = U.id
GROUP BY U.id,R.ETAT
ORDER BY U.groupe,U.id,R.ETAT;
/* Erreur SQL (1064) : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'U.id
,U.groupe
,R.ETAT
,COUNT(R.ETAT) as ' at line 1 */
/* Affected rows: 0 Lignes trouvées: 0 Avertissements: 0 Durée pour 0 of 1 query: 0,000 sec. */
SHOW PROFILE;
SET profiling=0;

je ne connait pas ce style de requête et dans les tuto que j'ai cherche, ils n'expliquent pas mon cas de figure, si tu peut m'aider sa me rendrait un grand service parce que par la suite j'aurais plusieurs requêtes de ce type a accomplir.
0
guedo Messages postés 77 Date d'inscription mercredi 26 novembre 2014 Statut Membre Dernière intervention 10 avril 2019 1
5 févr. 2015 à 09:20
Resalut jordane45 et a touts ceux qui sont présents je revient vers vous car j'ai encore un peiti besoin de vos aimables services en effet la requête magique de notre trés cher jordane45 :p me retourne ceci

sauf que moi j'aimerais l'afficher sur mon interface de cette facon


je vous joint ci dessous mon code qui sert d'affichage du tableau


La variable $res correspond au résultat de la requête, le probléme est que j'ai une erreur car les $i+1 n'existent pas forcement en effet imaginons qu'a la deuxième boucle on commence avec i=6 et pour finir je dois aller jusqu'à i = 11 or ce n'est pas forcé que ma variable $res[11] existe, elle s'arrête peut être avant

<table border="2" frame="box" class="table table-striped table-bordered">
                                          <tr>
                                              <th>Télepro</th> <th>Absent</th><th>Annuler</th><th>Attente</th><th>Bidon</th><th>Confirmer</th><th>Signe</th>
                                          </tr>
                                          <?php
                                               $res=$_SESSION['res'];
                                               $i=0;
                                               while($i < count ( $res ))
                                               {
                                                 echo '<tr>';
                                                 echo '<td align="center">'.$res[$i]['id'].'</td>';                                                  
                                                 echo '<td>'.$res[$i]['NB_RDV'].'</td>';
                                                 echo '<td>'.$res[$i+1]['NB_RDV'].'</td>';
                                                 echo '<td>'.$res[$i+2]['NB_RDV'].'</td>';
                                                 echo '<td>'.$res[$i+3]['NB_RDV'].'</td>';
                                                 echo '<td>'.$res[$i+4]['NB_RDV'].'</td>';
                                                 echo '<td>'.$res[$i+5]['NB_RDV'].'</td>';
												                          echo '</tr>';

                                                 $i = $i+6;
                                                }
                                            ?>
                                    </table>

c'est pourquoi je vous demande de l'aide a ce sujet pour m'aider a remplir le tableau de la maniere sur la photo joint plus haut
Merci d'avance
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
5 févr. 2015 à 09:32
Bonjour,

Il te suffit de parcourir les résultat ... et dès que le ID est différent du ID précédent... tu passes à la ligne suivante...
0
guedo Messages postés 77 Date d'inscription mercredi 26 novembre 2014 Statut Membre Dernière intervention 10 avril 2019 1
5 févr. 2015 à 10:11
daccord je vais essayer je te tiens au courant si j'ai reussi ou pas
0
guedo Messages postés 77 Date d'inscription mercredi 26 novembre 2014 Statut Membre Dernière intervention 10 avril 2019 1
Modifié par jordane45 le 5/02/2015 à 14:27
voila aprés m'être pencher a fond sur les while et les if j'ai pu arriver a la conclusion que malgres les 10000 boucles que j'ai fait sa n'a eu aucun impact sur la gestion de mon tableau voici la preuve de mon travail.
<table border="2" frame="box" class="table table-striped table-bordered">
                                          <tr>
                                              <th>Télepro</th> <th>Absent</th><th>Annuler</th><th>Attente</th><th>Bidon</th><th>Confirmer</th><th>Signe</th>
                                          </tr>
                                          <?php
                                               $res=$_SESSION['res'];
                                               $i=0;
                                               while($i < count ( $res ))
                                               {
                                                 $c=$i;
                                                 echo '<tr>';
                                                 echo '<td align="center">'.$res[$i]['id'].'</td>';                                                  
                                                 if($res[$i]['id']=$res[$c]['id']){
                                                    if($res[$i]['ETAT']='ABSENT'){
                                                        echo '<td>'.$res[$i]['NB_RDV'].'</td>';
                                                        $i=$i+1;
                                                      }
                                                      else{
                                                        echo '<td>'.'0'.'</td>';
                                                      }
                                                  } 
                                                        while($i < count ( $res )){
                                                              if($res[$i]['id']=$res[$c]['id']){
                                                                  if($res[$i]['ETAT']='ANNULER'){
                                                                      echo '<td>'.$res[$i]['NB_RDV'].'</td>';
                                                                      $i=$i+1;
                                                                  }
                                                                  else{
                                                                    echo '<td>'.'0'.'</td>';
                                                                  }
                                                              }
                                                              while($i < count ( $res )){
                                                                    if($res[$i]['id']=$res[$c]['id']){
                                                                        if($res[$i]['ETAT']='ATTENTE'){
                                                                            echo '<td>'.$res[$i]['NB_RDV'].'</td>';
                                                                            $i=$i+1;
                                                                        }
                                                                        else{
                                                                          echo '<td>'.'0'.'</td>';
                                                                        }
                                                                    }
                                                                    while($i < count ( $res )){
                                                                        if($res[$i]['id']=$res[$c]['id']){
                                                                            if($res[$i]['ETAT']='BIDON'){
                                                                                echo '<td>'.$res[$i]['NB_RDV'].'</td>';
                                                                                $i=$i+1;
                                                                            }
                                                                            else{
                                                                              echo '<td>'.'0'.'</td>';
                                                                            }
                                                                        }
                                                                        while($i < count ( $res )){
                                                                              if($res[$i]['id']=$res[$c]['id']){
                                                                                  if($res[$i]['ETAT']='CONFIRMER'){
                                                                                      echo '<td>'.$res[$i]['NB_RDV'].'</td>';
                                                                                      $i=$i+1;
                                                                                  }
                                                                                  else{
                                                                                    echo '<td>'.'0'.'</td>';
                                                                                  }
                                                                              }
                                                                              while($i < count ( $res )){
                                                                                  if($res[$i]['id']=$res[$c]['id']){
                                                                                      if($res[$i]['ETAT']='SIGNE'){
                                                                                          echo '<td>'.$res[$i]['NB_RDV'].'</td>';
                                                                              echo '</tr>';
                                                                                          $i = $i+1;
                                                                                      }
                                                                                      else{
                                                                                        echo '<td>'.'0'.'</td>';
                                                                                      }
                                                                                  }
                                                                            }
                                                                        }
                                                                    }
                                                              }
                                                        }  
                                                  
                                              }    
                                            ?>
                                    </table>


je pense que vous dirait que je suis fou lol mais au moins je peut dire que j'ai fait preuve de bonne foi et de volonté dans mon travail je vous joint le resultat de la requete ainsi que celui de l'affichage de mon tableau



vous pouvez remarquer que le deuxième identifiant ne s'affiche pas et,
-au lieu de mettre a la première ligne dans la colonne 'Signe' 0 , il me met le 2 qui est censer être dans la deuxième ligne a la colonne 'Absent',
- dans la deuxième ligne première colonne, au lieu de mettre nassima, il met le chiffre 1 qui est censer se trouver sur la même ligne dans la colonne 'Signe' et pour finir, il n'affiche aucun de mes 0

Merci de bien vouloir m'aider et encore merci jordane45
0
guedo Messages postés 77 Date d'inscription mercredi 26 novembre 2014 Statut Membre Dernière intervention 10 avril 2019 1
5 févr. 2015 à 15:43
c'est bon mesdames et messieurs voici la solution finale
<table border="2" frame="box" class="table table-striped table-bordered">
                                          <tr>
                                              <th>Télepro</th> <th>Absent</th><th>Annuler</th><th>Attente</th><th>Bidon</th><th>Confirmer</th><th>Signe</th>
                                          </tr>
                                          <?php
                                               $res=$_SESSION['res'];
                                               $i=0;
                                               $c=0;
                                               while($i < count ( $res ))
                                               {
                                                 $c=$i;
                                                 echo '<tr>';
                                                 echo '<td align="center">'.$res[$i]['id'].'</td>';                                                  
                                                 //if($res[$i]['id']=$res[$c]['id']){
                                                    if($res[$i]['ETAT']=='ABSENT'){
                                                        echo '<td>'.$res[$i]['NB_RDV'].'</td>';
                                                        $i=$i+1;
                                                      }
                                                      else{
                                                        echo '<td>'.'0'.'</td>';
                                                      }
                                                  //} 
                                                        if($i < count ( $res )){
                                                              //if($res[$i]['id']=$res[$c]['id']){
                                                                  if($res[$i]['ETAT']=='ANNULER'){
                                                                      echo '<td>'.$res[$i]['NB_RDV'].'</td>';
                                                                      $i=$i+1;
                                                                  }
                                                                  else{
                                                                    echo '<td>'.'0'.'</td>';
                                                                  }
                                                              //}
                                                              if($i < count ( $res )){
                                                                    //if($res[$i]['id']=$res[$c]['id']){
                                                                        if($res[$i]['ETAT']=='ATTENTE'){
                                                                            echo '<td>'.$res[$i]['NB_RDV'].'</td>';
                                                                            $i=$i+1;
                                                                        }
                                                                        else{
                                                                          echo '<td>'.'0'.'</td>';
                                                                        }
                                                                    //}
                                                                    if($i < count ( $res )){
                                                                        //if($res[$i]['id']=$res[$c]['id']){
                                                                            if($res[$i]['ETAT']=='BIDON'){
                                                                                echo '<td>'.$res[$i]['NB_RDV'].'</td>';
                                                                                $i=$i+1;
                                                                            }
                                                                            else{
                                                                              echo '<td>'.'0'.'</td>';
                                                                            }
                                                                        //}
                                                                        if($i < count ( $res )){
                                                                              //if($res[$i]['id']=$res[$c]['id']){
                                                                                  if($res[$i]['ETAT']=='CONFIRMER'){
                                                                                      echo '<td>'.$res[$i]['NB_RDV'].'</td>';
                                                                                      $i=$i+1;
                                                                                  }
                                                                                  else{
                                                                                    echo '<td>'.'0'.'</td>';
                                                                                  }
                                                                              //}
                                                                              if($i < count ( $res )){
                                                                                 // if($res[$i]['id']=$res[$c]['id']){
                                                                                      if($res[$i]['ETAT']=='SIGNE'){
                                                                                          echo '<td>'.$res[$i]['NB_RDV'].'</td>';
												                                                                  echo '</tr>';
                                                                                          $i = $i+1;
                                                                                      }
                                                                                      else{
                                                                                        echo '<td>'.'0'.'</td>';
                                                                                      }
                                                                                  //}
                                                                            }
                                                                        }
                                                                    }
                                                              }
                                                        }  
                                                  
                                              }    
                                            ?>
                                    </table>


c'est avec une satisfaction que je poste ma solution tellement je suis heureux d'avoir réussi lol
Encore merci a toutes l'équipe du site et surtout a jordane45 qui a pris du temps pour me répondre.
0