Eléphanteau du PHP |
31 Messages
11 juin 2022, 11:14
Bonjour,
Pour ceux qui cherche comment résoudre le vue non vue c'est pas si évident quand on est un noob comme moi
Normalement si vous avez bien créer votre table topic vous avec pris soin de créer une date de création je l'ai mise en datetime
Ensuite au lieu de faire un truc 1 ou 0 c'est pas très pratique puisse que une fois que 1 et égal a 1 on peut plus update a moins d'incrémenté +1 a chaque réponse
Ce que j'ai fais c'est une table séparé
Code : Tout sélectionner
SELECT `id`, `user_id`, `topic_id`, `read_topic` FROM `f_topic_track`
Une fois que l'on poste un topic l'auteur va inséré dans cette table évidement seul ceux qui sont connecter pourront update cette table comme ceci :
Code : Tout sélectionner
if(isset($_SESSION['auth']) && !empty($_SESSION['auth'])){
$userid = intval($_SESSION['auth']->id);//l'id en session de l'utilisateur
$get = intval($match['params']['id']); //l'id du topic ici moi j'utilise un routeur pour vous ça sera $_GET['id']
$views = $db->prepare("SELECT id FROM f_topic_track WHERE user_id = ? AND topic_id = ?");
$views->execute([$userid,$get]);
$view = $views->fetch();
//on update topic track en fonction de l'utilisateur qui regarde
if($view != null){
$u = [$userid,$get];
$db->prepare("UPDATE f_topic_track SET read_topic = NOW() WHERE user_id = ? AND topic_id = ?")->execute($u);
}else{
$i = [$userid,$get];
$db->prepare("INSERT INTO f_topic_track SET read_topic = NOW(), user_id = ?, topic_id = ?")->execute($i);
}
}
Et une fois a l'affichage vous allez faire une jointure et check les différente dates
Code : Tout sélectionner
CASE
WHEN read_topic < f_topic_date THEN f_topic_date
WHEN read_topic > f_topic_date THEN read_topic
END AS read_last
Et a la toutes fin suffit de faire une condition
Code : Tout sélectionner
isset($posts->read_last) && !empty($posts->read_last > $posts->f_topic_date) ? 'vu' : 'non vu' ;
Ensuite a chaque réponse vous allez mettre a jour la date du topic où vous avez répondu
Et voilà vous avez votre système et le plus beau est que vous pouvez faire un bouton tout marquer comme lu et ainsi supprimer cette table topic_track mais seulement de l'utilisateur courant et ça c'est si il a la flemme de tout lire.
Et en bonus :
Si vous voulez ordonner en fonction des dernière réponses a un topic afin qu'il remonté en top vous pouvez faire comme ceci
Code : Tout sélectionner
CASE
WHEN f_topic_date < f_topic_reponse_date THEN f_topic_reponse_date
WHEN f_topic_date > f_topic_réponse_date THEN f_topic_date
ELSE f_topic_date
END AS Lastdate
Et vous fait order by Lastdate
Bonne journée !!