Requette SQL dans 2 tables !!Aide

onvi Messages postés 19 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 20 avril 2007 - 13 févr. 2005 à 14:47
onvi Messages postés 19 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 20 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
{

for($i=0;$i<$nb_matieres;$i++)
{
$query="select * from eleves where matiere!='".$_POST["matiere"]."'- matiere='$matiere[$i]' ";
$result=mysql_query($query);
}
$totenreg=mysql_num_rows($result);
echo $totenreg;
echo "éléve(s) retouvé(s)";
}
while ( $row=mysql_fetch_array($result);
{
echo $row["nom"];
echo"--->";
echo $row["matiere"];
echo"--->";
echo $row["note"];
echo"
";
}
//fin

Le problémes c'est que ça marche pas, pourriez vous m'aider?
Merci

6 réponses

thongthephu Messages postés 97 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 13 mai 2006
13 févr. 2005 à 19:25
petite question
sa affiche quoi? la page est blanche?

512 mo de memoire vive pentium 4 2.98 ghz 160 go
0
onvi Messages postés 19 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 20 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.
0
elnawak Messages postés 27 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 21 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

@+
0
onvi Messages postés 19 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 20 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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
elnawak Messages postés 27 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 21 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.
0
onvi Messages postés 19 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 20 avril 2007
22 févr. 2005 à 20:25
Bonjour
Ton idée de traiter le probléme au moment de la suppression fonctionne à merveille.
Merci
0
Rejoignez-nous