Aller au contenu

requête avec jointures


joboy84

Sujets conseillés

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 tableau
echo'<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

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

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

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

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é par joboy84
Lien vers le commentaire
Partager sur d’autres sites

$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

Effectivement, il manquait encore une virgule :hypocrite:

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é par joboy84
Lien vers le commentaire
Partager sur d’autres sites

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 10
echo '<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-jeux
echo '<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é par Portekoi
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...