Partage
  • Partager sur Facebook
  • Partager sur Twitter

[MYSQL] bug affichage dans requete SQL

avec close order BY et GROUP BY

    29 juin 2010 à 21:17:23

    Bonjour a tous,

    Je suis actuellement sur un système de messagerie pour mon site et je bloque sur la dernière requête ><

    Le problème est simple, je veut ressortir le titre de tout les messages mais sans afficher 2 fois d'affilé un même sujet (avec ou sans réponse)
    C'est assez dur a expliquer mais voila la requête
    SELECT
          MAX(messagerie.id_message) AS id_message,
          messagerie.titre,
          COUNT(messagerie.id_message) as nbr_message,
          MAX(messagerie.date) AS date,
          MIN(messagerie.read) AS `read`,
          user.login AS sender_user
    FROM messagerie, user
    WHERE messagerie.id_receiver_user='". $user_ident ."' AND user.user_ident=messagerie.id_sender_user
    GROUP BY messagerie.link_message
    ORDER BY date DESC
    


    Donc cette requête fonctionne très bien a part le fait que messagerie.titre me renvoi le premier titre trouver au lieu de me renvoyer le dernier de la série.

    Ma question est donc comment faire pour récupérer ce dernier titre ?

    Merci d'avance
    Cyberfun
    • Partager sur Facebook
    • Partager sur Twitter
      30 juin 2010 à 0:32:15

      1) Mauvais forum, tu aurais plutôt dû poster dans le forum Base de données.
      2) Tu devrais nous donner le schéma de tes tables ainsi qu'un jeu d'essai et le résultat escompté pour qu'on puisse te donner une réponse exacte. Ta requête n'est pas valide : user.login ne se trouve ni dans le GROUP BY, ni avec une fonction d'agrégat. C'est typique à MySQL, cette requête ne passerait pas sur d'autres SGBDR. De plus, tu utilises la vieille syntaxe des jointures (obsolète depuis 1992) et tu as nommé tes colonnes / tables avec des mots-clés réservés à ton SGBDR.

      Bref, essaie de nous donner quelques informations supplémentaires pour qu'on puisse t'aider correctement.
      • Partager sur Facebook
      • Partager sur Twitter
        30 juin 2010 à 8:51:38

        ha désolé pour le mauvais forum si un admin peut le déplacé ca m'aiderait beaucoup :)

        Sinon effectivement j'ai pas donné beaucoup d'info :) je vais envoyer la structure de la base ^^

        Donc pour ce qui est du code c'est bon,

        Pour ce qui est du resultat envoyé j'ai ceci
        array(6) {
          [0] = array(6) {
                [id_message] = string(2) "27"
                [titre] = string(7) "hum...."
                [nbr_message] = string(1) "2"
                [date] = string(10) "1277844602"
                [read] = string(1) "1"
                [sender_user] = string(5) "harmo"
          }
          [1] = array(6) {
                [id_message] = string(2) "24"
                [titre] = string(17) "ceci est un titre"
                [nbr_message] = string(1) "1"
                [date] = string(10) "1277843120"
                [read] = string(1) "1"
                [sender_user] = string(5) "harmo"
          }
          [2] = array(6) {
                [id_message] = string(2) "23"
                [titre] = string(30) "RE : banzai test pour le count"
                [nbr_message] = string(1) "1"
                [date] = string(10) "1277838563"
                [read] = string(1) "1"
                [sender_user] = string(5) "harmo"
          }
          [3] = array(6) {
                [id_message] = string(2) "20"
                [titre] = string(16) "RE : test banzai"
                [nbr_message] = string(1) "1"
                [date] = string(10) "1277832426"
                [read] = string(1) "1"
                [sender_user] = string(5) "harmo"
          }
          [4] = array(6) {
                [id_message] = string(2) "15"
                [titre] = string(18) "test envoit messag"
                [nbr_message] = string(1) "8"
                [date] = string(10) "1277829489"
                [read] = string(1) "1"
                [sender_user] = string(5) "harmo"
          }
          [5] = array(6) {
                [id_message] = string(2) "11"
                [titre] = string(35) "RE : New message de la mort qui tue"
                [nbr_message] = string(1) "1"
                [date] = string(10) "1277817690"
                [read] = string(1) "1"
                [sender_user] = string(5) "harmo"
          }
        }


        et ca c'est la base sql
        Lien vers le fichier sql ici

        et ca c'est la structure (pour ceux qui veulent pas dl le fichier ^^

        CREATE TABLE IF NOT EXISTS `messagerie` (
          `id_message` int(10) unsigned NOT NULL auto_increment,
          `titre` varchar(255) NOT NULL,
          `message` longtext NOT NULL,
          `date` int(10) unsigned NOT NULL,
          `id_sender_user` varchar(250) NOT NULL,
          `id_receiver_user` varchar(250) NOT NULL,
          `read` tinyint(1) NOT NULL default '0',
          `link_message` varchar(250) NOT NULL,
          `delete_sender` tinyint(1) NOT NULL default '0',
          `delete_receiver` tinyint(1) NOT NULL default '0',
          PRIMARY KEY  (`id_message`)
        )
        



        Voila j'espère que ca vos aidera plus qu'a moi :)

        Pour info le link_message sert surtout a savoir les message associer entre eux lors de la réponse de l'utilisateur :)


        Note :
        J'ai remodifié ma requêtes comme tu me la dit mais j'ai toujours ce problème de titre :s

        Voici le code
        SELECT
        		MAX(M.id_message) AS id_message,
        		M.titre,
        		COUNT(M.id_message) as nbr_message,
        		MAX(M.date) AS `date`,
        		MIN(M.read) AS `read`,
        		U.login AS sender_user
        	    FROM messagerie M 
        		JOIN `user` U
        		    ON M.id_receiver_user='". $user_ident ."' AND U.user_ident=M.id_sender_user
        	    GROUP BY M.link_message, U.login
        	    ORDER BY M.date DESC
        
        • Partager sur Facebook
        • Partager sur Twitter

        [MYSQL] bug affichage dans requete SQL

        × 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