Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme avec une requete

Sujet résolu
    24 juin 2006 à 11:44:57

    Salut je voudrais faire un système de news pour mon site. Ce système n'est pas compliqué mais je voudrais aussi ausi afficher le nombre de comentaires pour la news. Et ça c'est dans une autre table alors je fais des sous requêtes et des jointures, mais au final il n'ya aucune erreur mais aucun texte qui est dans la boucle ne s'affiche.
    Voici mon code:
    $reponse = query('SELECT @id := id_news AS id_news, titre, pseudo, timestamp, intro, (SELECT COUNT(*) FROM news_commentaires WHERE id_news = @id)
                    AS nb_commentaires FROM news NATURAL JOIN news_commentaires WHERE id_news IN (SELECT DISTINCT id_news FROM news) GROUP BY id_news '
    );

    while ($donnees = mysql_fetch_assoc($reponse))
    {

    echo 'Cette phrase ne s\'affiche pas';

    }


    Voici mes tables:
    CREATE TABLE `news` (
      `id_news` int(11) NOT NULL AUTO_INCREMENT,
      `pseudo` varchar(22) NOT NULL,
      `titre` varchar(255) NOT NULL,
      `intro` text NOT NULL,
      `contenu` text NOT NULL,
      `timestamp` bigint(20) NOT NULL,
      KEY `id_news` (`id_news`)
    ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_bin AUTO_INCREMENT=7 ;



    CREATE TABLE `news_commentaires` (
      `id_com` int(11) NOT NULL AUTO_INCREMENT,
      `id_news` int(11) NOT NULL,
      `id` int(11) NOT NULL,
      `message` text NOT NULL,
      `date` bigint(20) NOT NULL,
      PRIMARY KEY  (`id_news`),
      KEY `id_com` (`id_com`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


    Est-ce que quelqu'un pourrait me dire pourquoi rien ne s'affiche?

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      24 juin 2006 à 11:55:39

      Pourquoi toutes ces sous-requêtes ? le NATURAL JOIN devrait suffire :)

      SELECT news.id_news, pseudo, titre, timestamp, intro, COUNT(news_commentaires.id_com) AS nb_commentaires
      FROM news
      NATURAL JOIN news_commentaires
      GROUP BY news.id_news

      ça marche ça ? :o (pas de quoi tester là tout de suite)


      Ah sinon, c'est quoi cette PRIMARY KEY sur id_news dans la table news_commentaires o_O tu te rends compte que ça n'autorise qu'un seul comentaire par news ?

      J'aurais plutôt vu un truc comme ça
      CREATE TABLE `news` (
        `id_news` int(11) NOT NULL AUTO_INCREMENT,
        `pseudo` varchar(22) NOT NULL,
        `titre` varchar(255) NOT NULL,
        `intro` text NOT NULL,
        `contenu` text NOT NULL,
        `timestamp` bigint(20) NOT NULL,
        PRIMARY KEY (`id_news`)
      ) ENGINE=MyISAM ;


      CREATE TABLE `news_commentaires` (
        `id_com` int(11) NOT NULL AUTO_INCREMENT,
        `id_news` int(11) NOT NULL,
        `id` int(11) NOT NULL,
        `message` text NOT NULL,
        `date` bigint(20) NOT NULL,
        KEY `id_news` (`id_news`),
        PRIMARY KEY (`id_com`)
      ) ENGINE=MyISAM  ;

      Et aussi, pourquoi ces 2 champs "id" ET "id_com" ? :o
      • Partager sur Facebook
      • Partager sur Twitter
        24 juin 2006 à 11:59:04

        Merci mais ta requête ne fonctionne pas non plus
        Ca fait pareil qu'avec l'autre
        • Partager sur Facebook
        • Partager sur Twitter
          24 juin 2006 à 12:16:06

          Avec les structures de tables de mon message précédent, ça marche :) (j'ai juste inversé KEY <=> PRIMARY KEY)

          Ah par contre ça n'affiche effectivement rien si tes news n'ont aucun commentaire

          Mais avec cette requête, si ^^
          SELECT news.id_news, pseudo, titre, timestamp, intro, COUNT(news_commentaires.id_com) AS nb_commentaires
          FROM news
          LEFT JOIN news_commentaires USING (id_news)
          GROUP BY news.id_news

          Si avec ça ça ne t'affiche toujours rien, c'est probablement que ta table news est vide :-°:p
          • Partager sur Facebook
          • Partager sur Twitter
            24 juin 2006 à 12:26:52

            Merci ça fonctionne maintenant
            • Partager sur Facebook
            • Partager sur Twitter

            Probleme avec une requete

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown