Problème de jointure

msi079 Messages postés 212 Date d'inscription lundi 2 août 2010 Statut Membre Dernière intervention 25 juillet 2013 - 20 déc. 2012 à 19:16
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 - 26 déc. 2012 à 17:39
salut je suis un tuto sur le net mais je bute sur une jointure de 3 tables . alors si quelqu'un pouvait m'aider .
voici l erreur qui s'affiche :
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\RESO_SOCIAL\functions\conversations.func.php on line 20.



voici la structure de mes tables :

conversations` (
`id_conversation` int(10) NOT NULL AUTO_INCREMENT,
`sujet_conversation` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id_conversation`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;

INSERT INTO `conversations` (`id_conversation`, `sujet_conversation`) VALUES
(2, 'la joie'),
(3, 'track')

conversations_membres` (
`id_conversation` int(10) NOT NULL AUTO_INCREMENT,
`pseudo_dest` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id_conversation`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;

INSERT INTO `conversations_membres` (`id_conversation`, `pseudo_dest`) VALUES
(2, 'isabelle'),
(3, 'isabelle'),

conversations_messages` (
`id_conversation` int(10) NOT NULL AUTO_INCREMENT,
`pseudo_exp` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`corps_message` text COLLATE utf8_unicode_ci NOT NULL,
`date_message` datetime NOT NULL,
PRIMARY KEY (`id_conversation`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;

INSERT INTO `conversations_messages` (`id_conversation`, `pseudo_exp`, `corps_message`, `date_message`) VALUES
(2, 'msi79', 'je veux te marier', '2012-12-19 21:29:32'),
(3, 'msi79', 'je vais te tracker a mort bb', '2012-12-20 09:01:40'),


utilisteurs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pseudo` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`sexe` varchar(12) COLLATE utf8_unicode_ci NOT NULL,
`situation` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`apropos` text COLLATE utf8_unicode_ci NOT NULL,
`avatar` varchar(150) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;


INSERT INTO `utilisteurs` (`id`, `pseudo`, `password`, `email`, `sexe`, `situation`, `apropos`, `avatar`) VALUES
(1, 'msi79', '0a689fa3811f3d605d82943c32cf17cdd764b291', 'soulzana@yahoo.fr', 'Homme', 'C�libataire', 'suis superrrrrrrrrrrrrrr', 'Photo_00058.jpg'),
(2, 'isabelle', '4303f7fbc75763e3133bf7714fc90f02260848b5', 'isa@live.fr', 'Homme', 'C�libataire', 'c mois la plus belle', '20121126_122254.jpg'),
(3, 'sool', '0a689fa3811f3d605d82943c32cf17cdd764b291', 'sool@yahoo.fr', 'Homme', 'C�libataire', 'le plus puissant', 'jolie.jpg');

et voici ma code php
<?php
  ////la function qui va recuperer les conversations
function recup_conversation(){

$results = array();
$sql = mysql_query("
 SELECT conversations.id_conversation,
  conversations.sujet_conversation,
  utilisteurs.pseudo,
  utilisteurs.avatar,
  conversations_messages.date_message,
  conversations_messages.pseudo_exp
  FROM conversations
  LEFT JOIN conversations_messages ON conversations.id_conversation = conversations_messages.id_conversation
  INNER JOIN conversations_messages ON conversations.id_conversation = conversations_messages.id_conversation
  INNER JOIN utilisteurs ON utilisteurs.pseudo = conversations_messages.pseudo_exp
  WHERE pseudo_exp = '{$_SESSION['pseudo']}'
  GROUP BY conversations.id_conversation
  ORDER BY conversations_messages.date_message
") or die(mysql_error());
 while($row = mysql_fetch_assoc($sql)){
   $results[] = $row;
 }
 return $results;
}
?> 

6 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
21 déc. 2012 à 00:04
Salut,

Pourquoi faire un "LEFT JOIN conversations_messages" et un "INNER JOIN conversations_messages" à la fois ? Enlève donc la ligne avec le left join qui ne sert à rien. Soit dit en passant, je te recommande très fortement de ne surtout pas utiliser les fonctions mysql_*.
0
Utilisateur anonyme
25 déc. 2012 à 23:25
Salut,

Comme l'a dit TychoBrahe, évite les fonctions comme mysql_connect etc et passe plutît par quelque chose de plus efficace et de plus puissance comme PDO qui permet de gérer de façon plus souple plusieurs types de BDD. Là, ti jamais tu venais à utiliser autre chose que MySQL, tu serais bon pour changer tout ton code.

Si on se tient uniquement à ton message d'erreur, c'est à cause du fait que mysql_query a échoué et a renvoyé une valeur entière en guise d'erreur (genre O ou 1). Du coup, ton mysql_fetch_assoc à un 0 ou un 1 en paramètre et il prend ça comme un booléen, d'où ton message d'erreur.

As-tu seulement pensé à tester ta requête SQL via la console de ta BDD pour voir si elle tournait bien ? J'en doute.

--
Pylouq
Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.
0
Utilisateur anonyme
25 déc. 2012 à 23:27
je corrige mes fautes de frappe, désolé pour le double-post

Salut,

Comme l'a dit TychoBrahe, évite les fonctions comme mysql_connect et passe plutôt par quelque chose de plus efficace et de plus puissant comme PDO qui permet de gérer de façon plus souple plusieurs types de SBDD. Là, si jamais tu venais à utiliser autre chose que MySQL, tu serais bon pour changer tout ton code.

Si on s'en tient uniquement à ton message d'erreur, c'est à cause du fait que mysql_query a échoué et a renvoyé une valeur entière en guise d'erreur (genre 0 ou 1). Du coup, ton mysql_fetch_assoc a un 0 ou un 1 en paramètre et il prend ça comme un booléen, d'où ton message d'erreur.

As-tu seulement pensé à tester ta requête SQL via la console de ton SGBD pour voir si elle tournait bien ? J'en doute.

--
Pylouq
Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
26 déc. 2012 à 12:40
Salut,

Si on s'en tient uniquement à ton message d'erreur, c'est à cause du fait que mysql_query a échoué et a renvoyé une valeur entière en guise d'erreur (genre 0 ou 1). Du coup, ton mysql_fetch_assoc a un 0 ou un 1 en paramètre et il prend ça comme un booléen, d'où ton message d'erreur.

Pas des entiers non, des bool, donc true ou false. Après, oui, 0 casté en bool donne false, 1 casté en bool donne true et réciproquement. Mais ce n'est pas une raison pour confondre les deux puisqu'ils ne sont pas du même type.
0

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

Posez votre question
Utilisateur anonyme
26 déc. 2012 à 15:18
Salut,

J'ai été voir dans la doc et je corrige ce que j'ai dis plus haut, j'ai confondu avec autre chose ^^" Du coup, msql_query renvoi en valeur booléenne FALSE quand y'a un problème (sinon ça renvoi une ressource). Autant pour moi ^^

--
Pylouq
Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
26 déc. 2012 à 17:39
Salut,

Juste pour le troll, c'est « au temps pour moi » ;)
0
Rejoignez-nous