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

Requêtes MySQL Discussion :

clause where dans ma requete join


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 116
    Points : 64
    Points
    64
    Par défaut clause where dans ma requete join
    Bonjour j'ai la requete suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT a.id_articles, a.titre_articles, a.contenu_articles, a.pseudo_articles, a.timestamp, COUNT(c.id_com) AS nb_commentaires, c.message, c.validation, c.pseudo  FROM articles a LEFT JOIN commentaires c ON a.id_articles=c.id_art and c.validation=1 group by a.id_articles ORDER BY a.timestamp DESC LIMIT 0, 5;
    et je voudrais y indiquer une condition supplémentaire pour ne faire ressortir que des articles dont j'ai recupere l'id. Je ne met pas le php mais en gros ce serait cela : where a.id_articles=1

    Je l'ai placé à plusieurs endroits et soit j'ai une erreure soit j'ai plus de 1 résultat.

    Est ce que un oeil expert verrait ou cela doit ce situer.

    Merci à vous

  2. #2
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    Bonjour,

    Curieuse requête. Puis-je m'hasarder à une version équivalente ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT a.id_articles, a.titre_articles, a.contenu_articles, a.pseudo_articles, a.timestamp, COUNT(c.id_com) AS nb_commentaires, c.message, c.validation, c.pseudo  
    FROM articles a INNER JOIN commentaires c ON (a.id_articles=c.id_art) 
    WHERE c.validation=1 
    GROUP BY a.id_articles ORDER BY a.timestamp DESC LIMIT 0, 5;
    Ensuite, si on rajoute la condition ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT a.id_articles, a.titre_articles, a.contenu_articles, a.pseudo_articles, a.timestamp, COUNT(c.id_com) AS nb_commentaires, c.message, c.validation, c.pseudo  
    FROM articles a INNER JOIN commentaires c ON (a.id_articles=c.id_art) 
    WHERE c.validation=1 AND a.id_articles=1
    GROUP BY a.id_articles ORDER BY a.timestamp DESC LIMIT 0, 5;
    Quelles sont les erreurs obtenues ?
    Pensez au tag

  3. #3
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 116
    Points : 64
    Points
    64
    Par défaut
    Ca commence à le faire, il me donne pas d'erreur mais aucun résultat. Mais je ne comprends pas il devrait me sortir mon article qui a l'id "1". Même si il n'y a pas de commentaires associés.

    Dans ma requête je fais une association entre ma table "articles" et ma table "commentaires". Je retiens les commentaires qui sont validé à "1". Il ya ensuite un regroupement pour compter le nombre de commentaires. J'ai supprimer le ORDER BY timestamp parce que je n'ais que 1 resultat. Ok il n'y a pas de commentaires encore associés.

    Mais quoiqu'il en soit j'ai bien dans ma base un id_article à "1".

  4. #4
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    Dans la requête que j'ai modifié, j'ai mis un INNER JOIN et pas un LEFT JOIN. Du coup, s'il n'y a pas de commentaire, pas d'article avec un id de 1

    En effet, pourquoi faire un LEFT JOIN si c'est pour faire un test c.validation=1 sur un champ validation qui est NULL ?
    Pensez au tag

  5. #5
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 116
    Points : 64
    Points
    64
    Par défaut
    En faite mon idée c'est de valider les commentaires pas les articles. Les articles que je sélectionne doivent toujours apparaître. Si jamais il n'y a pas de commentaires cela ne doit pas empecher l'article d'apparaitre.

    Ensuite il est juste que cela ne sert à rien de demander des champs commentaires null.

    Mais là, <strike>ma</strike> ta requete elle veut rien retourner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT a.id_articles, a.titre_articles, a.contenu_articles, a.pseudo_articles,
    a.timestamp, COUNT(c.id_com)
    AS nb_commentaires, c.message, c.validation, 
    c.pseudo FROM articles a INNER JOIN commentaires c 
    ON a.id_articles=c.id_art WHERE c.validation=1 
    AND a.id_articles=1 GROUP BY a.id_articles;";

  6. #6
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT a.id_articles, a.titre_articles, a.contenu_articles, a.pseudo_articles, a.timestamp, COUNT(c.id_com) AS nb_commentaires, c.message, c.validation, c.pseudo  
    FROM articles a LEFT JOIN commentaires c ON (a.id_articles=c.id_art) 
    WHERE (c.validation=1 OR c.validation IS NULL) AND a.id_articles=1
    GROUP BY a.id_articles
    Pensez au tag

  7. #7
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 116
    Points : 64
    Points
    64
    Par défaut
    Super,

    Tu m'as bien dépanner Adjanakis

    +9

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

Discussions similaires

  1. Pb de requete SQL avec clauses WHERE dans une procédure stockée
    Par CocoLeNain dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 11/06/2010, 23h48
  2. Clause WHERE dans requete
    Par c+cool dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/10/2007, 07h13
  3. [XLinq][C#3] clause where dans un select
    Par cladsam dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 20/04/2007, 12h23
  4. Une clause WHERE avant un LEFT JOIN ?
    Par bugalood dans le forum Langage SQL
    Réponses: 11
    Dernier message: 27/07/2005, 14h22
  5. Nombre de clauses ON dans un INNER JOIN
    Par Shadow aok dans le forum Requêtes
    Réponses: 5
    Dernier message: 30/06/2004, 15h42

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