Requête avec conditions dans des tables differentes (complexes)
Résolu
guedo
Messages postés
77
Date d'inscription
Statut
Membre
Dernière intervention
-
guedo Messages postés 77 Date d'inscription Statut Membre Dernière intervention -
guedo Messages postés 77 Date d'inscription Statut Membre Dernière intervention -
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.
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.
A voir également:
- Requête avec conditions dans des tables differentes (complexes)
- Table des matières word - Guide
- Tables ascii - Guide
- Table des caractères - Guide
- Table des annexes word ✓ - Forum Word
- Mise en forme conditionnelle excel plusieurs conditions - Guide
4 réponses
Bonjour,
Oriente toi vers les JOINTURE.
un truc du genre :
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
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
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
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

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
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.
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
<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
c'est bon mesdames et messieurs voici la solution finale
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.
<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.
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
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.