Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/10/2011, 15h50   #1
Candidat au titre de Membre du Club
 
Inscription : février 2006
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 54
Points : 13
Points : 13
Par défaut Jointure de tables

Bonjour,

Dans mon script de news, je souhaite afficher à côté de chaque news d'une part le nombre de personnes aimant la news, et d'autre part le nombre de commentaires lui étant associée. Avant ma requête SQL (fonctionnelle) n'avait pas ces fonctionnalités et se présentait ainsi dans le code PHP:

Code :
1
2
3
4
$sql = 'SELECT n.id, n.titre, SUBSTRING(n.contenu,1,' . $nombreCaracteresSQL . ') AS bout_news, n.miniature, n.timestamp, n.date_pub, c.idCat,c.name,o.idObject,o.idCat 
		        FROM news AS n, categorie AS c, objectcatlink AS o 
				WHERE (n.id = o.idObject AND n.valide=1 AND o.idCat = c.idCat AND c.idCat =' . $idCategorie . ') 
				GROUP BY n.id ORDER BY n.date_pub ' . $tri . ' LIMIT ' . $num_prem_news . ',' . $nombreDeNewsParPage ;
J'ai essayé d'adapter la requête mais dans PHPMyAdmin j'obtiens l'erreur suivante:

#1054 - Unknown column 'news.id' in 'on clause'

Voici la requête test qui renvoie l'erreur:

Code :
1
2
3
4
5
SELECT count(comment_news.id_commentaire) AS nb_comment, news.id, news.titre, SUBSTRING(news.contenu,1,500) AS bout_news, news.pseudo, news.timestamp, news.date_pub,    news.miniature, jaimes.votes AS j, categorie.idCat,categorie.name,objectcatlink.idObject,objectcatlink.idCat 
 
FROM news LEFT JOIN jaimes ON (news.id = jaimes.cle),categorie,objectcatlink LEFT JOIN comment_news ON (news.id = comment_news.fk_news AND comment_news.valide=1) 		
WHERE (news.id = objectcatlink.idObject AND news.valide=1 AND objectcatlink.idCat = categorie.idCat AND categorie.idCat =95)
GROUP BY news.id ORDER BY news.date_pub ASC LIMIT 1,10
Pouvez-vous me proposer une requête alternative pour régler ce problème? Malgré mes efforts et mes recherches en ligne je n'arrive pas à joindre les tables correctement.

Merci
Sébastien L est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2011, 16h31   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 641
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 641
Points : 2 634
Points : 2 634
Bonjour,

Essayez quelque chose comme ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
SELECT news.id, news.titre, 
SUBSTRING(news.contenu,1,500) AS bout_news, news.pseudo, news.timestamp, news.date_pub,    
news.miniature, jaimes.votes AS j, categorie.idCat,categorie.name,objectcatlink.idObject,objectcatlink.idCat ,
(SELECT count(*) FROM comment_news WHERE news.id = comment_news.fk_news AND comment_news.valide=1) AS nb_comment
 
FROM news 
INNER JOIN categorie ON news.id = objectcatlink.idObject
INNER JOIN objectcatlink ON objectcatlink.idCat = categorie.idCat
LEFT JOIN jaimes ON (news.id = jaimes.cle)
LEFT JOIN comment_news ON (news.id = comment_news.fk_news AND comment_news.valide=1) 		
WHERE news.valide=1  AND categorie.idCat =95
ORDER BY news.date_pub ASC LIMIT 1,10
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2011, 19h25   #3
Candidat au titre de Membre du Club
 
Inscription : février 2006
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 54
Points : 13
Points : 13
Merci beaucoup pour votre réponse. Malheureusement, j'obtiens l'erreur suivante que je ne comprends pas:

Citation:
#1054 - Unknown column 'objectcatlink.idObject' in 'on clause'
Une idée?

Merci
Sébastien L est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2011, 20h30   #4
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 641
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 641
Points : 2 634
Points : 2 634
ouaip je suis allé trop vite sur ce plan là...

une des jointures est mal exprimée donc ...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
SELECT news.id, news.titre, 
SUBSTRING(news.contenu,1,500) AS bout_news, news.pseudo, news.timestamp, news.date_pub,    
news.miniature, jaimes.votes AS j, categorie.idCat,categorie.name,objectcatlink.idObject,objectcatlink.idCat ,
(SELECT count(*) FROM comment_news WHERE news.id = comment_news.fk_news AND comment_news.valide=1) AS nb_comment
 
FROM news 
INNER JOIN objectcatlink ON news.id = objectcatlink.idObject 
INNER JOIN categorie ON objectcatlink.idCat = categorie.idCat
LEFT JOIN jaimes ON (news.id = jaimes.cle)
WHERE news.valide=1  AND categorie.idCat =95
ORDER BY news.date_pub ASC LIMIT 1,10
l'idée c'est de rapatrier dans le select le comptage de vos commentaire.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 00h20   #5
Candidat au titre de Membre du Club
 
Inscription : février 2006
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 54
Points : 13
Points : 13
Merci punkoff, ça fonctionne Je me souviendrai de votre astuce à la prochaine occasion
Sébastien L est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h48.


 
 
 
 
Partenaires

Hébergement Web