IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Jointure de tables


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 58
    Points : 34
    Points
    34
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    Essayez quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    Merci beaucoup pour votre réponse. Malheureusement, j'obtiens l'erreur suivante que je ne comprends pas:

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

    Merci

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    ouaip je suis allé trop vite sur ce plan là...

    une des jointures est mal exprimée donc ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    Merci punkoff, ça fonctionne Je me souviendrai de votre astuce à la prochaine occasion

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Jointure de table avec Interbase
    Par ada_b dans le forum InterBase
    Réponses: 21
    Dernier message: 12/05/2010, 19h52
  2. Réponses: 7
    Dernier message: 10/02/2005, 00h13
  3. [FB1.5]Vue avec jointure sur tables ?
    Par Sitting Bull dans le forum SQL
    Réponses: 2
    Dernier message: 07/12/2004, 17h07
  4. jointure sur table et procedure stocké
    Par pram dans le forum SQL
    Réponses: 3
    Dernier message: 18/11/2004, 21h56
  5. requete(jointure 2 tables) qui marche pas
    Par DaxTaz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/06/2004, 17h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo