Requette SQL dans 2 tables !!Aide

Signaler
Messages postés
19
Date d'inscription
mardi 30 novembre 2004
Statut
Membre
Dernière intervention
20 avril 2007
-
Messages postés
19
Date d'inscription
mardi 30 novembre 2004
Statut
Membre
Dernière intervention
20 avril 2007
-
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

Messages postés
97
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
13 mai 2006

petite question
sa affiche quoi? la page est blanche?

512 mo de memoire vive pentium 4 2.98 ghz 160 go
Messages postés
19
Date d'inscription
mardi 30 novembre 2004
Statut
Membre
Dernière intervention
20 avril 2007

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.
Messages postés
27
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
21 février 2005

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

@+
Messages postés
19
Date d'inscription
mardi 30 novembre 2004
Statut
Membre
Dernière intervention
20 avril 2007

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.
Messages postés
27
Date d'inscription
mercredi 3 septembre 2003
Statut
Membre
Dernière intervention
21 février 2005

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

Bonjour
Ton idée de traiter le probléme au moment de la suppression fonctionne à merveille.
Merci