Requête sur 2 tables php problème

[Résolu/Fermé]
Signaler
-
Messages postés
1054
Date d'inscription
samedi 14 mars 2009
Statut
Membre
Dernière intervention
23 octobre 2013
-
Bonjour à tous,

J'ai un problème de requête sur deux tables.

Voici mes tables :
______________
CODEELEVES
- nom
- prenom
- login
- mdp
- classe
_____________
et
_____________
INSCRIPTION
- logineleve
- idatelier
_____________

Les eleves s'inscrivent à un atelier, et leur login tiré de la table CODEELEVES insert une ligne dans la table INSCRIPTION.

Je dois faire un tableau avec le nom et prénom des élèves de seconde (2nd1, 2nd2, 2nd3...) non inscrits trié par classe.

Et c'est la que ça coince dans ma requête : j'ai utilisé la fonction "NOT IN" mais le résultat m'affiche la totalité des élèves de la table CODEELEVES de seconde. Pour test si je n'utilise que "IN' je n'ai par contre que les élèves inscrits, mais moi je voudrais le contraire.

HELP !!!

Voici mon code :

<?php
//connexion au serveur:

$cnx = mysql_connect( "******", "*****", "*****" );

//sélection de la base de données:

$db= mysql_select_db( "MABASE" );

//connexion au serveur:

$cnx2 = mysql_connect( "******", "*****", "*****" );

//sélection de la base de données:

$db2= mysql_select_db( "MABASE" );

//création de la requête SQL:
// on ne choisit que les ateliers ou l'éleve s'est inscrit

 $n = "2";
$sql = "SELECT DISTINCT classe, LEFT(classe,0) FROM codeeleves WHERE  classe = 2 ORDER BY classe";

//exécution de notre requête SQL:

$requete = mysql_query( $sql, $cnx ) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );

?> <table width="95%" border="1" align="left" bgcolor="#666666">
  <tr> <?php
while( $result = mysql_fetch_assoc( $requete ) )
{ 
?>  <th width="69" bgcolor="#666699"><?php echo( "<div align=\"center\">".$result["classe"]."</div>" );  ?></th> <tr></tr>

<?php

// $cl est la variable contenant le nom de la classe

$cl = $result['classe'];

// deuxieme requete dans la boucle____________

//$sql2 = "SELECT  nom, prenom, classe, login, logineleve FROM codeeleves, inscription WHERE  codeeleves.login NOT IN (inscription.logineleve) AND '".$cl."' = codeeleves.classe  GROUP BY codeeleves.login";

 $sql2 = "SELECT  nom, prenom, classe, login, logineleve FROM codeeleves, inscription WHERE codeeleves.login NOT IN (inscription.logineleve) AND  '".$cl."' = codeeleves.classe  GROUP BY codeeleves.login ";

//exécution de notre requête SQL:

$requete2 = mysql_query( $sql2, $cnx2 ) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );


 while( $result2 = mysql_fetch_assoc( $requete2 ) )

 { 
?>  <td width="100" bgcolor="#996600" class="Style1"><span class="Style5"><?php echo( "<div align=\"center\">".$result2["nom"]."</div>
<div align=\"center\">".$result2["prenom"]."</div></div>" );  ?></span></td> 
<?php
} ?>
<tr></tr> 
<?php 
// Fin de la deuxieme requete____________________________________________
}
?>


Merci de votre aide.

3 réponses

Messages postés
1054
Date d'inscription
samedi 14 mars 2009
Statut
Membre
Dernière intervention
23 octobre 2013
148
Salut,

En fait, il me semble que le NOT IN s'utilise dans ce cas par une requête en cascade...
SELECT valeurs FROM table WHERE valeur not in(select valeurs2 from table2 );
Merci pour la réponse, qui voudrait dire que c'est tout simple et que je n'étais pas loin de la vérité mais j'ai quand même une erreur et là : je bloque !!!

Mon code modifié :
 $sql2 = "SELECT  nom, prenom, classe, login, logineleve FROM codeeleves, inscription WHERE codeeleves.login NOT IN (inscription.logineleve FROM inscription) AND  '".$cl."' = codeeleves.classe  GROUP BY codeeleves.login ";


Et voici l'erreur :

ERREUR MYSQL numéro: 1064
Type de cette erreur: 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 'FROM inscription) AND '2CAP' = codeeleves.classe GROUP BY codeeleves.login' at line 1
Messages postés
1054
Date d'inscription
samedi 14 mars 2009
Statut
Membre
Dernière intervention
23 octobre 2013
148
Essaie comme ça pour voir.

$sql2 = "SELECT * FROM codeeleves WHERE classe='".$cl."' AND login NOT IN (SELECT logineleve FROM inscription) GROUP BY codeeleves.login ";
Stoooop;

Je suis une grosse tâche j'ai oublié le SELECT :
sql2 = "SELECT  nom, prenom, classe, login, logineleve FROM codeeleves, inscription WHERE codeeleves.login NOT IN (SELECT inscription.logineleve FROM inscription) AND  '".$cl."' = codeeleves.classe  GROUP BY codeeleves.login ";

Super ça marche, merci beaucoup Autumn'Tears
Messages postés
1054
Date d'inscription
samedi 14 mars 2009
Statut
Membre
Dernière intervention
23 octobre 2013
148
Au plaisir !