joboy84 Posté 24 Août 2009 Partager Posté 24 Août 2009 Bonjour, Je suis en train d'apprendre comment faire des requêtes avec jointures. <?php$requete = mysql_query('SELECT A.NomSite, A.Categorie FROM GestionMenus A, FicheSitesJeux B, NoteGlobaleVotes C WHERE A.NomSite = B.NomSiteJeux AND A.Section = "JeuxEnLigne" AND B.Taille = "Long" AND B.NomSiteJeux NOT IN (SELECT id_du_vote FROM NoteGlobaleVotes ORDER BY note DESC LIMIT 10) GROUP BY B.NomSiteJeux');while($donnees = mysql_fetch_array($requete)){array_push($tab1,array('NomSiteJeux' => $donnees['NomSite'], 'Categorie' => $donnees['Categorie']));//Test: on verifie les donnees inserees dans le tableauecho'<p>'.$donnees['NomSite'].'<p>';}?> En fait j'ai 3 tables: GestionMenus, FicheSitesJeux et NoteGlobaleVotes qui sont reliable par NomSite.GestionMenus, NomSiteJeux.FicheSitesJeux et id_du_vote.NoteGlobaleVotes Le probleme dans ma requete doit concerner NoteGlobaleVotes avec la clause NOT IN...cela m'indique un Warning: mysql_fetch_array() : supplied argument is not a valid Mysql result.. Donc je souhaite qu'il récupère les nom des sites de jeux présent dans la table GestionMenus et FicheSitesJeux, mais qui ne sont pas présent dans la requête NOT IN.. L'erreur retournée est : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 24 Août 2009 Partager Posté 24 Août 2009 Bonjour, Déjà, remplace ceci : $requete = mysql_query('SELECT A.NomSite, A.Categorie FROM GestionMenus A, FicheSitesJeux B, NoteGlobaleVotes C WHERE A.NomSite = B.NomSiteJeux AND A.Section = "JeuxEnLigne" AND B.Taille = "Long" AND B.NomSiteJeux NOT IN (SELECT id_du_vote FROM NoteGlobaleVotes ORDER BY note DESC LIMIT 10) GROUP BY B.NomSiteJeux'); par cela : $requete = mysql_query('SELECT A.NomSite, A.Categorie FROM GestionMenus A, FicheSitesJeux B, NoteGlobaleVotes C WHERE A.NomSite = B.NomSiteJeux AND A.Section = "JeuxEnLigne" AND B.Taille = "Long" AND B.NomSiteJeux NOT IN (SELECT id_du_vote FROM NoteGlobaleVotes ORDER BY note DESC LIMIT 10) GROUP BY B.NomSiteJeux') or die('Erreur SQL !'.$sql.' '.mysql_error()); Comment relis tu les 3 tables? Quelle est la clé en chaque? Lien vers le commentaire Partager sur d’autres sites More sharing options...
joboy84 Posté 24 Août 2009 Auteur Partager Posté 24 Août 2009 Re Alors l'erreur retournée est : Erreur SQL !Resource id #6 This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' Sinon je compredns pas trop ce que tu veux dire... pour relire j'utilise les données insérées dans le tableau...ou cela ne marchera t il pas avec une requete comportant des jointures? Les tables sont reliés par NomSite.GestionMenus, NomSiteJeux.FicheSitesJeux et id_du_vote.NoteGlobaleVotes, soit NomSite, NomSiteJeux et id_du_vote qui ont tous les champs la meme valeur... Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 24 Août 2009 Partager Posté 24 Août 2009 Re, Change ceci : $requete = mysql_query('SELECT A.NomSite, A.Categorie FROM GestionMenus A, FicheSitesJeux B, NoteGlobaleVotes C WHERE A.NomSite = B.NomSiteJeux AND A.Section = "JeuxEnLigne" AND B.Taille = "Long" AND B.NomSiteJeux NOT IN (SELECT id_du_vote FROM NoteGlobaleVotes ORDER BY note DESC LIMIT 10) GROUP BY B.NomSiteJeux') or die('Erreur SQL !'.$sql.' '.mysql_error()); Par cela : $requete = mysql_query('SELECT A.NomSite, A.Categorie C.Note FROM GestionMenus A, FicheSitesJeux B, NoteGlobaleVotes C WHERE A.NomSite = B.NomSiteJeux AND A.Section = "JeuxEnLigne" AND B.Taille = "Long" AND B.NomSiteJeux NOT IN (SELECT id_du_vote FROM NoteGlobaleVotes) GROUP BY A.NomSite, A.Categorie C.Note ORDER BY C.note DESC LIMIT 10') or die('Erreur SQL !'.$sql.' '.mysql_error()); Lien vers le commentaire Partager sur d’autres sites More sharing options...
joboy84 Posté 24 Août 2009 Auteur Partager Posté 24 Août 2009 (modifié) Cela renvoie Erreur SQL !Resource id #6 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 'C.note ORDER BY C.note DESC LIMIT 10' at line 1 Pour: $requete = mysql_query('SELECT A.NomSite, A.Categorie, C.note FROM GestionMenus A, FicheSitesJeux B, NoteGlobaleVotes C WHERE A.NomSite = B.NomSiteJeux AND A.Section = "JeuxEnLigne" AND B.Taille = "Long" AND B.NomSiteJeux NOT IN (SELECT id_du_vote FROM NoteGlobaleVotes) GROUP BY A.NomSite, A.Categorie C.note ORDER BY C.note DESC LIMIT 10') or die('Erreur SQL !'.$sql.' '.mysql_error()); Modifié 24 Août 2009 par joboy84 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 24 Août 2009 Partager Posté 24 Août 2009 $requete = mysql_query('SELECT A.NomSite, A.Categorie, C.note FROM GestionMenus A, FicheSitesJeux B, NoteGlobaleVotes C WHERE A.NomSite = B.NomSiteJeux AND A.Section = "JeuxEnLigne" AND B.Taille = "Long" AND B.NomSiteJeux NOT IN (SELECT id_du_vote FROM NoteGlobaleVotes) GROUP BY A.NomSite, A.Categorie, C.note ORDER BY C.note DESC LIMIT 10') or die('Erreur SQL !'.$sql.' '.mysql_error()); Lien vers le commentaire Partager sur d’autres sites More sharing options...
joboy84 Posté 24 Août 2009 Auteur Partager Posté 24 Août 2009 (modifié) Effectivement, il manquait encore une virgule En fait cela me retourne: Marre Toilokdo Toilokdo Marre Marre Toilokdo Marre Toilokdo Marre Toilokdo $tab array(7) { [0]=> array(1) { ["NomSiteJeux"]=> string(9) "Camenerve" } [1]=> array(1) { ["NomSiteJeux"]=> string(9) "Toilokdo2" } [2]=> array(1) { ["NomSiteJeux"]=> string(8) "Binbango" } [3]=> array(1) { ["NomSiteJeux"]=> string(9) "Fichetest" } [4]=> array(1) { ["NomSiteJeux"]=> string(10) "Testimania" } [5]=> array(1) { ["NomSiteJeux"]=> string(7) "Labrute" } [6]=> array(1) { ["NomSiteJeux"]=> string(6) "Marre2" } } $tab1 array(10) { [0]=> array(2) { ["NomSiteJeux"]=> string(5) "Marre" ["Categorie"]=> string(10) "Multi-Jeux" } [1]=> array(2) { ["NomSiteJeux"]=> string(8) "Toilokdo" ["Categorie"]=> string(10) "Multi-Jeux" } [2]=> array(2) { ["NomSiteJeux"]=> string(8) "Toilokdo" ["Categorie"]=> string(10) "Multi-Jeux" } [3]=> array(2) { ["NomSiteJeux"]=> string(5) "Marre" ["Categorie"]=> string(10) "Multi-Jeux" } [4]=> array(2) { ["NomSiteJeux"]=> string(5) "Marre" ["Categorie"]=> string(10) "Multi-Jeux" } [5]=> array(2) { ["NomSiteJeux"]=> string(8) "Toilokdo" ["Categorie"]=> string(10) "Multi-Jeux" } [6]=> array(2) { ["NomSiteJeux"]=> string(5) "Marre" ["Categorie"]=> string(10) "Multi-Jeux" } [7]=> array(2) { ["NomSiteJeux"]=> string(8) "Toilokdo" ["Categorie"]=> string(10) "Multi-Jeux" } [8]=> array(2) { ["NomSiteJeux"]=> string(5) "Marre" ["Categorie"]=> string(10) "Multi-Jeux" } [9]=> array(2) { ["NomSiteJeux"]=> string(8) "Toilokdo" ["Categorie"]=> string(10) "Multi-Jeux" } } Or j'aurai que souhaité avoir les 2 éléments dans l'array $tab1, et non limité à 10 ces entrées, et ni afficher en doublon les données Est ce possible? Code entier: <?php$tab=array();$tab1=array();//On crée un premier tableau$sql=mysql_query('SELECT id_du_vote FROM NoteGlobaleVotes ORDER BY note DESC LIMIT 10');while($res = mysql_fetch_array($sql)){array_push($tab,array('NomSiteJeux' => $res['id_du_vote']));} $requete = mysql_query('SELECT A.NomSite, A.Categorie, C.note FROM GestionMenus A, FicheSitesJeux B, NoteGlobaleVotes C WHERE A.NomSite = B.NomSiteJeux AND A.Section = "JeuxEnLigne" AND B.Taille = "Long" AND B.NomSiteJeux NOT IN (SELECT id_du_vote FROM NoteGlobaleVotes) GROUP BY A.NomSite, A.Categorie, C.note ORDER BY C.note DESC LIMIT 10') or die('Erreur SQL !'.$sql.'<br>'.mysql_error());while($donnees = mysql_fetch_array($requete)){array_push($tab1,array('NomSiteJeux' => $donnees['NomSite'], 'Categorie' => $donnees['Categorie']));echo'<p>'.$donnees['NomSite'].'<p>';} var_dump($tab);echo'<p>';var_dump($tab1);?> Maintenant en essayant d'arriver au résultat espéré sans jointure, cela m'a donné cela: <?php$tab=array();$tab1=array();//On crée un premier tableau$sql=mysql_query('SELECT id_du_vote FROM NoteGlobaleVotes ORDER BY note DESC LIMIT 10');while($res = mysql_fetch_array($sql)){array_push($tab,array('NomSiteJeux' => $res['id_du_vote']));} $requete = mysql_query('SELECT A.NomSite, A.Categorie FROM GestionMenus A, FicheSitesJeux B WHERE A.NomSite = B.NomSiteJeux AND A.Section = "JeuxEnLigne" AND B.Taille = "Long" GROUP BY B.NomSiteJeux');while($donnees = mysql_fetch_array($requete)){array_push($tab1,array('NomSiteJeux' => $donnees['NomSite'], 'Categorie' => $donnees['Categorie']));echo'<p>'.$donnees['NomSite'].'<p>';} var_dump($tab);echo'<p>';var_dump($tab1);for($i = 0; $i < count($tab1); $i++) // Tant que l'on peut parcourir le tableau{ if (in_array($tab1['NomSiteJeux'],$tab)) //On teste si l'élément est dans le 1er tableau { echo'<p>'.$tab1['NomSiteJeux'].'<p>'; } }?> Voila ce que retourne var_dump avec 7 elements noté, figurant dans le top10 et 2 elements present dans GestionMenus: [u][b]$tab :[/b][/u]array(7) { [0]=> array(1) { ["NomSiteJeux"]=> string(9) "Camenerve" } [1]=> array(1) { ["NomSiteJeux"]=> string(9) "Toilokdo2" } [2]=> array(1) { ["NomSiteJeux"]=> string(8) "Binbango" } [3]=> array(1) { ["NomSiteJeux"]=> string(9) "Fichetest" } [4]=> array(1) { ["NomSiteJeux"]=> string(10) "Testimania" } [5]=> array(1) { ["NomSiteJeux"]=> string(7) "Labrute" } [6]=> array(1) { ["NomSiteJeux"]=> string(6) "Marre2" } } [u][b]$tab1 :[/b][/u]array(2) { [0]=> array(2) { ["NomSiteJeux"]=> string(5) "Marre" ["Categorie"]=> string(10) "Multi-Jeux" } [1]=> array(2) { ["NomSiteJeux"]=> string(8) "Toilokdo" ["Categorie"]=> string(10) "Multi-Jeux" } } Ceci devrait donc afficher les noms de sites de jeux: Toilokdo et Marre car ils ne sont pas présent dans le premier tableau...Mais cela me retourne rien... Modifié 24 Août 2009 par joboy84 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 24 Août 2009 Partager Posté 24 Août 2009 Je n'ai pas compris ce que tu souhaitais afficher... Site - Catégorie - Note ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
joboy84 Posté 24 Août 2009 Auteur Partager Posté 24 Août 2009 (modifié) Bon finalement j'ai fais 2 tableaux pour afficher ce que je veux... Tout fonctionne...Merci tout de meme pour votre aide <?php$tab=array();$tab1=array();//On crée un premier tableau$sql=mysql_query('SELECT id_du_vote FROM NoteGlobaleVotes ORDER BY note DESC LIMIT 10');while($res = mysql_fetch_array($sql)){array_push($tab,array('NomSiteJeux' => $res['id_du_vote']));} $requete = mysql_query('SELECT A.NomSite, A.Categorie FROM GestionMenus A, FicheSitesJeux B WHERE A.NomSite = B.NomSiteJeux AND A.Section = "JeuxEnLigne" AND B.Taille = "Long" GROUP BY B.NomSiteJeux');while($donnees = mysql_fetch_array($requete)){if(in_array($donnees['NomSite'], $tab) == FALSE){array_push($tab1,array('NomSiteJeux' => $donnees['NomSite'], 'Categorie' => $donnees['Categorie'])); }} //Affichage menu top 10echo '<ul>'; for($i = 0; $i < count($tab); $i++) { echo'<li><a href="/presentation-du-site-de-jeux-en-ligne-'.$tab[$i]["NomSiteJeux"].'.html">'.$tab[$i]["NomSiteJeux"].'</a></li>'; } echo'</ul>';echo'<p><p>';//Affichage menu rubrique multi-jeuxecho '<ul>'; for($j = 0; $j < count($tab1); $j++) { if($tab1[$j]["Categorie"] == "Multi-Jeux") { echo'<li><a href="/presentation-du-site-de-jeux-en-ligne-'.$tab1[$j]["NomSiteJeux"].'.html">'.$tab1[$j]["NomSiteJeux"].'</a></li>'; } } echo'</ul>';?> Modifié 24 Août 2009 par Portekoi Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant