tri (mysql ou php)

WRInaute passionné
Salut, j'ai un problème de tri, et j'aurai voulu résoudre ça via mysql, ou a défaut sous php après.

J'ai deux tables :

articles a (id, article)
commentaires c (id, id_article, commentaire, date)

La jointure est celle-ci : c.id_article=a.id

Je voudrais trier par ordre de commentaires décroissants regroupés par article.

Si c'est pas possible, existe t'il une fonction sous php qui permette de faire ça directement, ou est ce qu'il faut la créer ?

Merci !
 
Nouveau WRInaute
SELECT article, count(commentaire) as nbr
FROM articles,commentaires
WHERE articles.id = commentaires.id_articles
ORDER BY nbr DESC

ca fonctionne pas ca ?
 
WRInaute accro
Mertyl a dit:
SELECT article, count(commentaire) as nbr
FROM articles,commentaires
WHERE articles.id = commentaires.id_articles
ORDER BY nbr DESC

ca fonctionne pas ca ?

Il faudra surement faire un truc du genre , mais il ne nous dit pas s'il veut trier les commentaires séparément ou par nombre de commentaire pour chaque article.

Ca manque d'info ou alors je comprends pas ce qu'il demande.
 
WRInaute passionné
Merci pour l'ébauche.
Le code proposé sélectionne le nombre de commentaires associés à chaque article, et trie le résultat par nombre décroissant. Ce n'st pas ce que je veux faire

Je veux sélectionner tous les commentaires (c.id), groupés par articles (a.id), et triés par date de dernier commentaire

ex : liste d'articles et date des commentaire associés
article - date commentaires associés
1 - 17h30 19h00 21h00
2 - 18h20 19h30 20h00
3 - 14h00 22h00

ici je voudrais récupérer ça
article - date commentaire associé
3 - 22h00
3 - 14h00
1 - 21h00
1 - 19h00
1 - 17h30
2 - 20h00
2 - 19h30
2 - 18h20

Merci pour vos :idea:
 
WRInaute accro
pour afficher :

article - date commentaire associé
3 - 22h00
3 - 14h00
1 - 21h00
1 - 19h00
1 - 17h30
2 - 20h00
2 - 19h30
2 - 18h20

j'utiliserais quelque chose comme ça:

Code:
SELECT id_article, date
FROM commentaires
ORDER BY id_article DESC,date DESC;

Si tu comptes mettre en même temps le commentaire en lui même, bah tu rajoutes le champ commentaire dans ton select.

article - date commentaire associé - commentaire
3 - 22h00 - blabla1
3 - 14h00 - ...
1 - 21h00
1 - 19h00
1 - 17h30
2 - 20h00
2 - 19h30
2 - 18h20

Ce qui donne:

Code:
SELECT id_article, date, commentaire
FROM commentaires
ORDER BY id_article DESC,date DESC;

NB: Tu n'as pas besoin d'utiliser la table "article" pour faire ça !

Si maintenant, tu as encore envie d'afficher en plus, l'article en lui même. Ca va te faire une requête bien balaise en ressources ! :p Mais bon, ce n'est pas ce que tu veux vu comme tu viens de l'expliquer, vu que tu veux juste afficher ça tu as dis:


article - date commentaire associé
3 - 22h00
3 - 14h00
1 - 21h00
1 - 19h00
1 - 17h30
2 - 20h00
2 - 19h30
2 - 18h20

Si ce n'est pas le cas, ben va falloir être un poil plus clair.
 
WRInaute passionné
Merci. Je suis bine d'accord avec toi, je n'ai pas besoin de la table article dans la requête, et au pire je ferais une jointure

Tu propose ça
YoyoS a dit:
Code:
(..) ORDER BY id_article DESC,date DESC;

Mais ça trie par id_article, puis par date : ça va donner ça :

1 - 21h00
1 - 19h00
1 - 17h30
2 - 20h00
2 - 19h30
2 - 18h20
3 - 22h00
3 - 14h00

alors que je voudrais afficher en premier l'article dont le dernier commentaire est le plus récent :wink:
 
WRInaute accro
ORDER BY id_article DESC,date DESC;

Non ca va te classer en priorité tous les articles en décroissant. Et pour chaque article identique, te mettre la date en décroissant. Merci de tester !

En oracle ça marche en tout cas, t'es sure que ça marche pas sous mysql ?
 
WRInaute passionné
YoyoS a dit:
ORDER BY id_article DESC,date DESC;

Non ca va te classer en priorité tous les articles en décroissant. Et pour chaque article identique, te mettre la date en décroissant. Merci de tester !

on est bien d'accord, et c'est EXACTEMENT ce que je disais plus haut :wink: mais c'est pas ce que je veux....

Je veux trier par COMMENTAIRES du plus au moins récent, MAIS EN REGROUPANT les articles

compris ? :oops:
 
WRInaute occasionnel
jeroen a dit:
Je veux trier par COMMENTAIRES du plus au moins récent, MAIS EN REGROUPANT les articles

Et comme ça, est-ce mieux ?
Code:
SELECT t.id_article,t.date FROM (SELECT id_article,date FROM commentaires ORDER BY date DESC) t GROUP BY t.id_article ORDER BY t.date DESC

(A noter que c'est beaucoup plus précis qu'un simple : "SELECT id_article,date FROM commentaires GROUP BY id_article ORDER BY date DESC" dans le cas où "date" est sous la forme aaaa-mm-jj)
 
WRInaute occasionnel
jeroen a dit:
ah, merci mais je tourne encors sous mysql 4, pas de requête double :oops:
Bah moi aussi pourtant... Tu as quand même essayé ?

Et celle-là ?
Code:
SELECT id_article,date FROM commentaires GROUP BY id_article ORDER BY date DESC
 
WRInaute passionné
Oui, mais en fait le GROUP BY regroupe tous les articles et ne laisse plus qu'un commentaire. Donc je ne pense pas qu'un GROUP BY puisse faire l'affaire...
 
Discussions similaires
Haut