Bonsoir,
Mon code fait une simple req qui affiche mes topics créer dans un forum en particulier, jusque la c'est simple.
/********
* on recupere les topic par forum
*********/
$get_topics = $db->prepare("
SELECT
f_topics.id AS topicsid,
f_topics.f_topic_content,
f_topics.f_topic_name,
f_topics.f_forum_id,
f_topics.f_user_id,
f_topics.f_topic_date,
f_topics.f_topic_vu,
f_topics.f_rep_topic_nb,
f_topics.f_topic_last_autor,
f_topics.f_topic_last_date,
users.id AS usersid,
users.username
FROM f_topics
LEFT JOIN users ON users.id = f_topics.f_user_id
WHERE f_topics.f_forum_id = ?
GROUP BY f_topics.id
ORDER BY f_topics.f_topic_last_date DESC
");
Alors ce que je veut, et c'est la que je ne parvient pas a le faire !!
le but est de faire une condition sur la date dans le ORDER la je fait un DESC sur la date de création d'une réponse, comme ça la réponse s'affiche en haut de la liste des topics, vous me suivez ?
Mais je veus aussi que quand je créer un topic et que sa date de création est plus récente que la réponse alors je souhaite qu'il soit afficher en haut.
sur le papier ça peut être simple, mai dans la pratique je ne comprend pas comment faire ni si on peut faire un if dans une req.
sinon je ferais un truc dans ce genre :
if($date-topic > $date-reponse){
ORDER BY date-topic DESC
}else{
ORDER BY date-reponse DESC
}
quand j'ai un topic récent sans reponse il est en bas de la liste même si il est plus récent que la réponse, mai moi je souhaiterais qu'il ce chevauche comme sur n'importe quel forum.
Tu peux utiliser la structure CASE WHEN de MySQL ce qui revient à un if
SELECT CASE
WHEN TopicDate > ResponseDate THEN TopicDate
ELSE ResponseDate
END AS LastDate FROM topics WHERE 1
ORDER BY LastDate;
En effet je ne connaisser pas cette fonction il y en tellment, merci :)
donc si j'ai bien compris en lisant la doc je dois faire comme ceci ?
$get_topics = $db->prepare("
SELECT
f_topics.id AS topicsid,
f_topics.f_topic_content,
f_topics.f_topic_name,
f_topics.f_forum_id,
f_topics.f_user_id,
f_topics.f_topic_date,
f_topics.f_topic_vu,
f_topics.f_rep_topic_nb,
f_topics.f_topic_last_autor,
f_topics.f_topic_last_date,
users.id AS usersid,
users.username,
CASE
WHEN f_topics.f_topic_date > f_topics.f_topic_last_date THEN f_topics.f_topic_date
ELSE f_topics.f_topic_last_date
END AS Lastdate
FROM f_topics
LEFT JOIN users ON users.id = f_topics.f_user_id
WHERE f_topics.f_forum_id = ?
GROUP BY f_topics.id
ORDER BY Lastdate DESC
");
$get_topics->execute(array($id));