Partage
  • Partager sur Facebook
  • Partager sur Twitter

Logique d'une jointure

Sujet résolu
    7 novembre 2017 à 18:10:22

    Bonsoir,

    J'ai besoin d'obtenir en une requête la date du dernier post, le pseudo de la personne qui l'a posté et le nombre de poste dans un topic précis. Quand je fais cette requête, l'id de l'utilisateur correspond : on a le bon utilisateur qui a posté à la date la plus récente.

    select top_id, max(post_date) as lastDatePost, usr_id, count(post_id) as nbPost
                    from t_post
                    group by top_id

    mais lorsque que je fais une jointure avec la table t_usr pour pouvoir récupérer le pseudo (et pas que l'id) ça foire tout

    select top_id, max(post_date) as lastDatePost, usr_name, usr_id, count(post_id) as nbPost
                    from t_post
                    natural join t_user
                    group by top_id

    ça me retourne un id et un pseudo complètement random, pas du tout celui lié a la publication. Du coup je bloque un peu sur le pourquoi du comment ça fait ça.

    Je sais pas si j'ai été clair mais si quelqu'un pouvait m'aider ce serait top ! merci


    • Partager sur Facebook
    • Partager sur Twitter
      7 novembre 2017 à 19:46:11

      Bonjour,

      Ce ne serait pas plutôt INNER JOIN que tu veux faire ?

      • Partager sur Facebook
      • Partager sur Twitter
        8 novembre 2017 à 8:48:54

        Bonjour,

        kevinours a écrit:

        ça me retourne un id et un pseudo complètement random, pas du tout celui lié a la publication

        La magie du GROUP BY avec MySQL :D

        Un peu de lecture : http://cedric-duprez.developpez.com/tutoriels/mysql/demythifier-group-by/

        kevinours a écrit:

        obtenir en une requête la date du dernier post, le pseudo de la personne qui l'a posté et le nombre de poste dans un topic précis

        Peut-on connaître la structure de tes deux tables post et user et la logique de création ?

        • Partager sur Facebook
        • Partager sur Twitter
        Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
          8 novembre 2017 à 10:32:25

          Je comprend mieux le souci du coup, mes deux requêtes sont mauvaises du coup, j'ai juste eu de la chance sur la première.

          Voila les deux tables. Je me suis beaucoup inspiré de ce cours J'essaye de faire un forum avec silex. Un post est lié a son topic (top_id) et a l'utilisateur qui l'a publié (usr_id). Je veux faire comme sur un forum classique, quand on peut voir la liste des topics, on peut voir le dernier membre a avoir posté dans ce topic et l'heure du dernier post.

          -
          Edité par kevinours 8 novembre 2017 à 10:39:04

          • Partager sur Facebook
          • Partager sur Twitter
            8 novembre 2017 à 10:52:40

            Il faudrait d'abord déterminer par topic le dernier post :

            -- Dernier post_id et nombre de posts par topic
            SELECT top_id, MAX(post_id) as max_post, COUNT(*) as nb_post
            FROM t_post
            GROUP BY top_id

            Et utiliser cela comme sous-requête :

            SELECT
            	T.top_id,
            	T.nb_post,
            	P.post_date,
            	U.usr_name
            FROM
            	(
            		-- Dernier post_id et nombre de posts par topic
            		SELECT top_id, MAX(post_id) as max_post, COUNT(*) as nb_post
            		FROM t_post
            		GROUP BY top_id
            	) T
            		INNER JOIN t_post P
            			ON T.max_post = P.post_id
            		INNER JOIN t_user U
            			ON P.usr_id = U.usr_id
            • Partager sur Facebook
            • Partager sur Twitter
            Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
              8 novembre 2017 à 12:01:27

              Je savais pas qu'on pouvait faire des requêtes de ce type la, ça marche c'est super cool merci ! j'vais essayer de bien piger comment ça marche :D
              • Partager sur Facebook
              • Partager sur Twitter

              Logique d'une jointure

              × 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