Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Système forums] Aide sur une requête SQL

Utilisation d'ORDER BY

Sujet résolu
    4 décembre 2011 à 15:38:58

    Bonjour;
    Je suis penché sur la création d'un système forums et j'ai pas mal de soucis pour l'instant côté SQL.
    J'essaie de faire la requête suivante :
    " Ordonner les sujets d'un forum selon leur type, puis la date de la dernière réaction sur un sujet et enfin la date de la création d'un sujet ".
    Comme solution primaire, j'ai élaboré la requête SQL suivante :
    SELECT Post.id_post, titre_post, resolu_post, slug_post, aff_post, etat_post, type_post, horaire_post, Post.id_user, pseudo, type, MAX(id_reponse) AS der_reponse, MAX(horaire_reponse) AS hr_der_reponse, COUNT(id_reponse) AS nbr_reponses 
    FROM posts AS Post 
    NATURAL JOIN users  
    LEFT JOIN reponses  ON reponses.id_post=Post.id_post  
    WHERE id_forum=2 
    GROUP BY Post.id_post  
    ORDER BY type_post  DESC ,  hr_der_reponse DESC ,horaire_post DESC 
    LIMIT 0,10
    


    Il se voit que ce que je fais dans cette dernière c'est une jointure de trois table qui sont :
    1- posts
    2- users
    3- reponses

    Détails:

    - type_post (integer) : représente le type du post ==> critère d'ordonnancement : du plus grand vers le plus petit.
    - hr_der_reponse et horaire_post (integer /*timestamp*/) ===>critère d'ordonnancement : de la date la plus récente vers la plus ancienne.

    Problèmatique:

    Pour tout les cas possibles cette requête semblait bien marcher sauf pour le cas où j'ai un post où aucune réponse y figure ! ===> il se place tout à la fin de ma liste que qu'en fait il devait se plaçait là où il doit suivant sont type d'abord puis sa date de création seulement.
    Bon c'est logique puisque, le post n'a aucune réponse donc y a pas de "hr_der_reponse" qui représente la date de la dernière réaction dans sur ce post.

    Question(s):
    Y'aurait-il une astuce pour éviter ça en SQL?
    Merci en avance pour votre aide
    • Partager sur Facebook
    • Partager sur Twitter
      4 décembre 2011 à 16:25:29

      Si tu veux comparer avec une autre colonne lorsque hr_der_response est NULL, tu dois écrire COALESCE(hr_der_reponse, ton_autre_colonne). Cela va retourner hr_der_reponse s'il n'est pas NULL, sinon ton_autre_colonne.
      • Partager sur Facebook
      • Partager sur Twitter
        4 décembre 2011 à 17:08:09

        Merci pour ta réponse.

        Citation : Fayden

        COALESCE(hr_der_reponse, horaire_post) AS critere_ord


        C'est ce que j'avais fait.
        Voilà ce que ça donne en tout :
        SELECT Post.id_post, titre_post, resolu_post, slug_post, aff_post, etat_post, type_post, horaire_post, Post.id_user, pseudo, type, MAX(id_reponse) AS der_reponse, MAX(horaire_reponse) AS hr_der_reponse, COUNT(id_reponse) AS nbr_reponses, 
        COALESCE(hr_der_reponse,horaire_post) AS critere_ord  
        FROM posts as Post NATURAL JOIN users  LEFT JOIN reponses  ON reponses.id_post=Post.id_post  
        WHERE id_forum=2 
        GROUP BY Post.id_post  
        ORDER BY type_post  DESC ,  hr_der_reponse DESC ,horaire_post DESC LIMIT 0,10
        


        Mais il me sort un warning du genre :
        Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'hr_der_reponse' in 'field list


        Je ne sais que ce qu'il lui prend? (je lui en veux pas parce que ça vient de ma part :p , mais je ne sais d'où :-° )
        • Partager sur Facebook
        • Partager sur Twitter

        [Système forums] Aide sur une requête SQL

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown