cette rep me pose un souci

Par neecride, il y a 9 ans


Bonsoir,

Ce que je fais

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 ");

Ce que je veux

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 }

Ce que j'obtiens

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.

2 réponses

Huggy, il y a 9 ans

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;
neecride, il y a 9 ans

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));