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
Réponse acceptée

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
Auteur

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