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
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.
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
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
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.
N'oubliez pas d'activer les erreurs PDO.