onvi
Messages postés19Date d'inscriptionmardi 30 novembre 2004StatutMembreDernière intervention20 avril 2007
-
13 févr. 2005 à 14:47
onvi
Messages postés19Date d'inscriptionmardi 30 novembre 2004StatutMembreDernière intervention20 avril 2007
-
22 févr. 2005 à 20:25
Bonjour
j'ai un petit probléme qui au début me paraissait simple.
Sur un projet que je suis amené à faire à l'université j'ai fait un site ou on peut classer des élèves dans une base de données en entrant leur nom, matiére et note.
eleves(id,nom,login, matiere, note)
Les matieres sont choisis à partir d'une liste qui est enregistrée dans une base de données
matieres(id, matiere)
Il arrive que les profs suppriment des matieres de la tables 'matieres' sauf la valeur "Autres"
Et maintenant il faut chercher les élèves ayant une matier qui n'existe plus dans la matiére 'matieres' en choisissant Autres
Je me suis dis c'est une requéte simple et voilà ce que j'ai fait :
//chargement du matiéres
$resultatma=mysql_query("SELECT * FROM matieres;",$id);
$nb_matieres=mysql_num_rows($resultatma);
for($i=0;$i<$nb_matieres;$i++)
{ $matieres[$i]=mysql_result($resultatma,$i,"matieres");
}
//fin du chargement
if($_POST["matiere"]=="Autres")//si on a choisit Autres
{
onvi
Messages postés19Date d'inscriptionmardi 30 novembre 2004StatutMembreDernière intervention20 avril 2007 14 févr. 2005 à 12:20
Bonjour
Non j'ai un résultat qui s'affiche mais ce n'est pas ce que je cherche, il me donne tous les éléves sauf ceux qui ont la matiére classé à la premiére place ou à la derniere (je me rappel pas bien en tout cas c'est soit l'une soit l'autre) dans la table 'matieres', comme si la requéte qui est dans la boucle "for" ne fesait l'operation ( - ) qu'une seule fois.
elnawak
Messages postés27Date d'inscriptionmercredi 3 septembre 2003StatutMembreDernière intervention21 février 2005 15 févr. 2005 à 11:46
salut !
si ta base te le permet essaie ca :(
eleve.matiere doit etre une cle etrangere )
SELECT * FROM eleves LEFT JOIN matiere ON matiere.id=eleve.matiere
ca va te retourner tous les
eleves avec leurs matieres en php tu verifie si eleve.matiere ==
matiere.matiere (tu risque d'avoir qq probleme avec deux champs
identiques) ceux ou
matiere.matiere vaut null ou " " c'est qu'ils n'ont plus de reference dans matiere.
le top ca serai de traiter le probleme au moment de la suppression, car
tu sais quelle matiere est supprimer et ca simplifie la tache !!!
PS: plus bessoin de boucle juste cette requete et ses resultats
onvi
Messages postés19Date d'inscriptionmardi 30 novembre 2004StatutMembreDernière intervention20 avril 2007 15 févr. 2005 à 18:17
Bonjour
Avec le LEFT JOIN, les éléves que je cherche, leurs matiéres n'apparaient pas dans le résultat.
Par contre j'ai pas bien compris comment traiter le probléme au moment de la supression de la matiére.
Vous n’avez pas trouvé la réponse que vous recherchez ?
elnawak
Messages postés27Date d'inscriptionmercredi 3 septembre 2003StatutMembreDernière intervention21 février 2005 16 févr. 2005 à 12:15
bizzrare le LEFT JOIN ... si ca te retourne rien verifie que eleve.matiere = = matiere.matiere (cle primaire , cle etrangère) sinon tu peux faire comme suit :
pour traiter le probleme au moment de la supression, c'est pas tres compliqué je m'explique :
lors de la supression d'une matiere, tu connais la matiere a supprimer, donc a ce moment tu peux rechercher les éleves concernés par cette supression et les traites ou bien les marqués (mettre une valeur "speciale" dans eleve.matiere ou un champ prevu a cet effet ) pour les traités ultèrieurement si une intervention humaine est nécéssaire.
ex :
$sql=" DELETE FROM matiere WHERE idmatiere =".$id ;
<!--StartFragment -->
au moment de ton DELETE tu fais aussi :
$sql2" UPDATE eleves <gras>SET champ_que_tu_veux</gras> ". ce que tu veux ."WHERE eleve.matiere=".$id ;<!--StartFragment -->
je connais pas la structure de ta base mais grossièrement tu devrai avoir deux requète de ce type .
voila si tu as des questions précise le structure de ta base et ce que tu vaux faire exactement quand tu supprime une matière.