Problème de LEFT JOIN

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème de LEFT JOIN

par pascaltje » 06 févr. 2008, 17:07

la syntaxe du LEFT JOIN est fausse, il faut essayer :

Code : Tout sélectionner

SELECT user_id, user_login, user_level, user_mail, user_points, COUNT(concours_id) as concoursProposes, COUNT(reponse_id) as reponsesProposees FROM users LEFT JOIN concours ON user_id = concours_user_id LEFT JOIN reponses ON user_id = reponse_user_id GROUP BY user_id
A+

Pascal

par VaN » 06 févr. 2008, 16:14

Elle me semble bonne :
SELECT user_id, user_login, user_level, user_mail, user_points, COUNT(concours_id) as concoursProposes, COUNT(reponse_id) as reponsesProposees FROM users LEFT JOIN concours, reponses ON user_id = concours_user_id AND user_id = reponse_user_id GROUP BY user_id
Je pensais plutot que c'etait un probleme sur le LEFT JOIN, car je n'étais pas sur que l'on puisse faire un LEFT JOIN sur deux tables en meme temps, et je n'étais pas sur non plus qu'il fallait utilisé un AND, après le ON.

par d0m » 06 févr. 2008, 15:11

Ca veut dire que tu as une erreur de syntaxe SQL juste avant ce morceau de requete :

Code : Tout sélectionner

reponses ON user_id = concours_user_id AND user_id = reponse_us
tu dois avoir un problème avec la variable $prefixe

Fais un echo de ta requete $sql pour voir ce qui cloche et si ta requête est bien comme tu le penses.

par VaN » 06 févr. 2008, 14:12

Oui il y'a un message d'erreur, que voici :
#1064 - Erreur de syntaxe près de ' reponses ON user_id = concours_user_id AND user_id = reponse_us' à la ligne 1
Ce msg d'erreur apparait à la fois sur la page, et dans PHPmyAdmin

par Sékiltoyai » 05 févr. 2008, 16:50

Quand tu dis "ca ne marche plus", ca veut dire quoi, il y a une erreur ?
Essaye d'exécuter la requète hors de ton code, directement dans un client mysql…

Problème de LEFT JOIN

par VaN » 05 févr. 2008, 15:38

Bonjour,

J'aimerai afficher un tableau d'utilisateurs, dans lequel je compte le nombre de concours et de réponses qu'ils ont proposé.

Voici la structure de ces 3 tables :

Code : Tout sélectionner

CREATE TABLE `users` ( `user_id` int(11) NOT NULL auto_increment, `user_login` text character set latin1 collate latin1_general_cs NOT NULL, `user_pass` text character set latin1 collate latin1_general_cs NOT NULL, `user_mail` text NOT NULL, `user_level` tinyint(4) NOT NULL, `user_activated` tinyint(4) NOT NULL, `user_activation_key` text character set latin1 collate latin1_general_cs NOT NULL, `user_logged` tinyint(4) NOT NULL, `user_last_session` datetime NOT NULL, `user_points` int(11) NOT NULL, `user_parrain_id` int(11) NOT NULL, `user_concours_done` text NOT NULL, `user_scoot_activated` tinyint(4) NOT NULL, PRIMARY KEY (`user_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=23 ; CREATE TABLE `concours` ( `concours_id` int(11) NOT NULL auto_increment, `concours_user_id` int(11) NOT NULL, `concours_site_id` int(11) NOT NULL, `concours_url` text NOT NULL, `concours_start_date` datetime NOT NULL, `concours_end_date` datetime NOT NULL, `concours_type` tinyint(4) NOT NULL, `concours_qs` enum('Oui','Non') NOT NULL, `concours_nb_reponses` tinyint(4) NOT NULL, `concours_reponses` text NOT NULL, `concours_lots` text NOT NULL, `concours_rating` tinyint(4) NOT NULL, `concours_activated` tinyint(4) NOT NULL, PRIMARY KEY (`concours_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ; CREATE TABLE `reponses` ( `reponse_id` int(11) NOT NULL auto_increment, `reponse_concours_id` int(11) NOT NULL, `reponse_user_id` int(11) NOT NULL, `reponse_text` text NOT NULL, `reponse_valid` tinyint(4) NOT NULL, PRIMARY KEY (`reponse_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;
Et voici ma requete. Elle fonctionnait bien pour compter le nombre de concours, mais maintenant que je viens de rajouter la table REPONSES dans le JOIN et l'equivalence d'ID avec un nouveau ON, cela ne marche plus. Ma synthaxe n'est pas bonne ?
$sql = 	"SELECT user_id, user_login, user_level, user_mail, user_points, COUNT(concours_id) as concoursProposes, COUNT(reponse_id) as reponsesProposees
		FROM ".$prefixe."users
		LEFT JOIN ".$prefixe."concours, ".prefixe."reponses ON user_id = concours_user_id AND user_id = reponse_user_id
		GROUP BY user_id";