tri (mysql ou php)

jeroen
WRInaute passionné
WRInaute passionné
 
Messages: 2455
Inscription: 30 Aoû 2002

tri (mysql ou php)

Message le Jeu Nov 15, 2007 17:31

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 !


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3827
Inscription: 14 Sep 2006

Message le Jeu Nov 15, 2007 17:41

Dis voir ce que tu veux sélectionner, ça sera plus clair déjà ! :D

Mertyl
WRInaute discret
WRInaute discret
 
Messages: 59
Inscription: 17 Juin 2007

Message le Jeu Nov 15, 2007 18:13

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

ca fonctionne pas ca ?


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3827
Inscription: 14 Sep 2006

Message le Jeu Nov 15, 2007 18:44

Mertyl a écrit: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.

jeroen
WRInaute passionné
WRInaute passionné
 
Messages: 2455
Inscription: 30 Aoû 2002

Message le Jeu Nov 15, 2007 20:26

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:


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3827
Inscription: 14 Sep 2006

Message le Jeu Nov 15, 2007 23:40

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: Tout sélectionner
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: Tout sélectionner
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.

jeroen
WRInaute passionné
WRInaute passionné
 
Messages: 2455
Inscription: 30 Aoû 2002

Message le Ven Nov 16, 2007 0:13

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 écrit:
Code: Tout sélectionner
(..) 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:


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3827
Inscription: 14 Sep 2006

Message le Ven Nov 16, 2007 0:18

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 ?

jeroen
WRInaute passionné
WRInaute passionné
 
Messages: 2455
Inscription: 30 Aoû 2002

Message le Ven Nov 16, 2007 0:43

YoyoS a écrit: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:

Blaze_Heatnix
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 321
Inscription: 31 Déc 2003

Message le Ven Nov 16, 2007 2:31

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


Et comme ça, est-ce mieux ?
Code: Tout sélectionner
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)

jeroen
WRInaute passionné
WRInaute passionné
 
Messages: 2455
Inscription: 30 Aoû 2002

Message le Ven Nov 16, 2007 6:48

ah, merci mais je tourne encors sous mysql 4, pas de requête double :oops:

Blaze_Heatnix
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 321
Inscription: 31 Déc 2003

Message le Ven Nov 16, 2007 19:42

jeroen a écrit: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: Tout sélectionner
SELECT id_article,date FROM commentaires GROUP BY id_article ORDER BY date DESC

jeroen
WRInaute passionné
WRInaute passionné
 
Messages: 2455
Inscription: 30 Aoû 2002

Message le Ven Nov 16, 2007 20:00

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...


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: ericstamant et 0 invités