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 :

count avec 2 tables


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Points : 27
    Points
    27
    Par défaut count avec 2 tables
    Bonjour à vous.
    J'ai fait une petite recherche et je suis passé dans la FAQ, mais je n'ai pas trouvé comment expliquer mon probleme.

    Rapide description : je veux connaitre le nombre de réactions postées pour chaques news de mon site en meme temps que je récupère les autres infos (titre, contenu, date..). Mais les réactions sont dans une autre tables. J'ai donc essayer dans un premier temps :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT n.id, n.title, COUNT(r.id) AS nbr_react FROM news as n, react as r WHERE n.id=r.id_news GROUP BY r.id_news ORDER BY n.id DESC LIMIT 0,5
    Mais le probleme est qu'il ne me sort pas les news avec aucune réaction (vu que le count vaut 0) (du moins je pense que c'est du à ca). Alors ca n'affiche pas les news sans réactions. J'ai ensuite essayer une jointure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT n.id, n.title, COUNT(r.id) AS nbr_react FROM news AS n LEFT JOIN react AS r ON n.id=r.id_news GROUP BY r.id_news ORDER BY n.id DESC LIMIT 0,5
    Mais là, je ne sais pas pourquoi, il ne me renvoit que 2 enregistrements.. Voilà, si vous pouviez m'aider, ca serait gentil. Merci d'avance.

    P.S. : Sympa le nouveau forum, ça faisait un petit temps que je n'étais pas passé ici, ca a bien changé

  2. #2
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Bonjour,

    Tu as combien de r.id ds ta base ?
    Si la réponse est le nbre de lignes que tu obtiens -1
    essaies de grouper sur n.id, n.title.

  3. #3
    Membre averti Avatar de jota5450
    Inscrit en
    Janvier 2006
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Janvier 2006
    Messages : 263
    Points : 332
    Points
    332
    Par défaut
    slt.


    Je viens de m´amusser a creer 2 table que je pense, doivent etre pareil que les tiennes (du moin je pense). ca aurait ete plus facile si tu nous les auraient donner.


    et ben avec ton deuxieme code, ca functionne impec...
    j´ai juste changer r.id par r.id_news. je pense que ce soit une faute de frape.

    t´es sur d´avoir plus de 2 reaction dans tes news? je sais que la question est un peut stupide, mais bon...

    ou bien, mes tables sont differentes des tiennes.

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 94
    Points : 120
    Points
    120
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select news.*, count(distinct react.id) 
    from news, react
    where react.id_news=news.id_news
    and news.id_news=X 
    group by news.id_news

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Points : 27
    Points
    27
    Par défaut
    Désolé de ne pas avoir inclus les structures des tables dès le départ.. j'ai hésité..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    -- 
    -- Structure de la table `news`
    -- 
     
    CREATE TABLE `news` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `title` varchar(50) NOT NULL,
      `content` mediumtext NOT NULL,
      `cat` tinyint(3) unsigned NOT NULL,
      `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
      PRIMARY KEY  (`id`)
    ) COMMENT='News du site';
     
    -- --------------------------------------------------------
     
    -- 
    -- Structure de la table `react`
    -- 
     
    CREATE TABLE `react` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `id_news` int(10) unsigned NOT NULL,
      `user_name` varchar(20) NOT NULL,
      `content` tinytext NOT NULL,
      `ip` varchar(15) NOT NULL default '000.000.000.000',
      `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
      PRIMARY KEY  (`id`)
    ) COMMENT='Comentaires des news.';
    (ne faites pas attention au mediumtext et tinytext, je ne savais pas quoi mettre )

    Sinon j'ai essayer de modifier le groupage, je n'ai pas vu d'améliorations et je ne vois pas ou serait ma faute de frappe ?? Sinon le code proposé par CrayCat n'affiche pas les news qui n'ont pas de réactions.. nan ?

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Points : 27
    Points
    27
    Par défaut
    Bon et bien j'ai réussi en faisant un groupage sur n.id et non sur r.id_news bien que le ON spécifie qu'ils soient égaux.. je vois pas trop la subtilité..

    Sinon, je déleste le message ou pas ? Je ne pense pas qu'il ait beaucoup d'intérêt mais si vous pensez qu'il peut en aidez d'autres.. dites-le !

  7. #7
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    re,

    Citation Envoyé par "PerfectSlayer
    Bon et bien j'ai réussi en faisant un groupage sur n.id et non sur r.id_news
    C ce que je te conseillais hier.

    Avec 1 LEFT JOIN, si tu n'as pas de reponse r.id est NULL.
    Avec GROUP BY r.id, tu groupes ts les NULL ensemble, qque soit la valeur de n.id.
    Si tu groupes sur n.id, il te restera tjours 1 ligne par valeur différente de id, meme si r.id est null parce que tu n'as pas de réponse.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Points : 27
    Points
    27
    Par défaut
    Arf.. Désolé, j'avoue que je ne suis pas encore très à l'aise avec tout ça. En tout cas, merci à vous tous pour votre aide.

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

Discussions similaires

  1. select count avec 3 tables
    Par Riwalenn dans le forum Langage
    Réponses: 3
    Dernier message: 15/09/2010, 15h26
  2. [Requête SQL] - Select count avec plusieurs tables
    Par Pithonnette dans le forum SQL
    Réponses: 7
    Dernier message: 25/06/2009, 20h19
  3. Count avec clause where multi table
    Par james_kirk dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/01/2008, 18h35
  4. Réponses: 3
    Dernier message: 09/11/2006, 00h04
  5. Réponses: 12
    Dernier message: 12/06/2006, 15h29

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