[RESOLU] Des petites question de requêtes

Avatar du membre
Eléphanteau du PHP | 36 Messages

22 avr. 2016, 20:29

Bonsoir,

Voila je suis au bout de la création de mon forum piufff...

Maintenant j'ai ces questions :

1 - comment afficher le dernier posteur d'un topic sans connaitre l'id en get ? en page index par exemple

Exemple que je comprend on est sur la page topic :
//avec un id en get je récupère mes topics + réponses + user
$id = intval($_GET['id']);

$topic = $db->("
SELECT topic.id, user.username
LEFT JOIN users ON user.id = topic.poster_id
WHERE topic.id = $id
");

$reponse = $db->("
SELECT user.username, reponse.topic_id
FROM reponse
LEFT JOIN user ON user.id = reponse.poster_id
WHERE reponse.topic_id = $id
");
De cette manière c'est logique je récupère mes réponses liée au GET qui est l'id du topic ensuite j'affiche tous ce don j'ai besoin.

Donc avec un id en get c'est simple.

2 - comment modifier les réponse sur la même page edite que les topic avec le get je modifie avec le where jusque la c'est bon, mai ma table réponse n'est pas la même table donc a moins de crées une page pour les réponses et une pour les premier topic je ne vois pas comment faire de plus que sur reponse on a pas de titre juste le message.

Donc voila mes interrogations.

Bon soir !!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 avr. 2016, 12:49

Bonjour,

Pour connaitre le dernier posteur, tu peux soit exécuter ta première requête, récupérer le résultat pour avoir l'id de ton topic et ensuite faire une seconde requête pour aller chercher le dernier posteur. Avec un ORDER BY et un LIMIT tu peux récupérer les enregistrements des réponses des plus récentes aux plus anciennes et ne retourner que le dernier.
Inconvénient : tu exécutes autant de requête que tu as de topic à l'écran.. c'est simple à faire mais pas terrible côté performances surtout si tu ne maitrises pas le nombre de topic qui seront affichés par page.

Tu peux aussi faire une jointure entre tes tables topic, reponse, et user. Il faudrait pour cela inclure deux fois la table user dans tes jointures avec des alias différents. Le premier te permettrait de connaitre le nom de l'initiateur du topic et l'autre le nom du dernier posteur. En jouant sur des MAX et GROUP BY tu dois pouvoir récupérer uniquement les derniers enregistrements de chaque topic.
Plus complexe à écrire, mais tu n'exécutes qu'une seule requête...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...