|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() ![]() Inscription : mai 2008 Messages : 66 ![]() |
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 : Code :
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 |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 653 ![]() |
Bonjour,
la structure de votre requête est a revoir. En effet vous utilisez un group by mais vous avez les 3/4 des colonnes du select qui ne sont : - ni dans la clause group by - ni encadré d'une fonction d'agrégation Pour en revenir à votre problème, vous pourriez utiliser COALESCE dans le select afin d'avoir horaire_post quand hr_der_reponse est null |
|
|
00
|
|
|
#3 | |
|
Nouveau Membre du Club
![]() ![]() Inscription : mai 2008 Messages : 66 ![]() |
D'abord merci pour votre réponse.
Citation:
Parce-que je voyais que le group by id_post suffisait et que je devais récupérer les colonnes via php. Je dois d'abord voir ce que c'est puis, je vous fournirai le résultat. |
|
|
|
00
|
|
|
#4 | |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 653 ![]() |
Citation:
Dans le cas présent vous ne maitrisez pas les valeurs des colonnes qui ne sont ni dans le group by, ni encadré par une fonction d'agrégation. La vous ne voyez pas de problème car il n'y a qu'une ligne par post_id, mais vous risquez d'avoir des surprises avec d'autre cas. |
|
|
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() ![]() Inscription : mai 2008 Messages : 66 ![]() |
Merci
Je verrai en la forme de ma requête alors. Sinon, le problème a été résolu, en ajoutant ça : Code :
COALESCE(MAX(horaire_reponse),horaire_post) AS critere_ord |
|
|
10
|
Copyright © 2000-2012 - www.developpez.com