Page 1 sur 1

Requete un peu spécial

Posté : 04 oct. 2005, 18:08
par Damien__42
Salut à tous,

Je suis en train de me prendre la tete sur une requete, je ne trouve pas la solution :/ il n'y en a peut etre pas, voila le problème :

J'aimerais afficher mes articles triés par catégorie et par Date, c'est à dire que si la date d'un seul article change dans une catégorie, l'ensemble des autres articles sont affichés avec lui.
Pour cela, j'ai deux tables, une table Catégorie et une table Article

Catégorie 1 :
- Article 10 Update : 30/09/05
- Article 16 Update : 30/09/05
- Article 22 Update : 10/09/05

Catégorie 3 :
- Article 10 Update : 30/09/05
- Article 16 Update : 11/09/05
- Article 22 Update : 30/09/05

Catégorie 2 :
- Article 10 Update : 30/09/05
- Article 16 Update : 30/09/05
- Article 22 Update : 12/09/05

Je vous remercie d'avance !!!

Posté : 04 oct. 2005, 18:37
par heddicmi
Tu peux donner la structure des 2 tables ?

Posté : 04 oct. 2005, 20:49
par Damien__42
C'est une structure très simple :

Table Catégorie :
id - nom_categorie

Table Article :
id - nom_article - id_categorie - date_article

Merci encore !!!

Posté : 04 oct. 2005, 21:05
par Cyrano
Il y a quelque chose de pas logique dans l'exemple montré au début: on retrouve les mêmes articles dans les trois catégories: si je me fie à la structure, ce devrait être impossible :-k

À quoi devrait donc ressembler ce que tu attends ?

Posté : 04 oct. 2005, 22:55
par Damien__42
Oui tu as raison Cyrano !

Me suis planter en faisant le copier coller quel couillon : )
Voila cela ressemblerait à ça

Catégorie 1 :
- Article 10 Update : 30/09/05
- Article 16 Update : 30/09/05
- Article 22 Update : 10/09/05

Catégorie 3 :
- Article 4 Update : 30/09/05
- Article 25 Update : 11/09/05
- Article 47 Update : 30/09/05

Catégorie 2 :
- Article 8 Update : 30/09/05
- Article 1 Update : 30/09/05
- Article 12 Update : 12/09/05

Pour résumé, je cherche le moyen de regroupé les articles par catégorie et de les afficher trier par date

Merci à vous tous :)

Posté : 04 oct. 2005, 23:33
par heddicmi
Bin tu fais une requete récupérant la table des articles avec un order by sur l'id et la date :roll:

Posté : 04 oct. 2005, 23:33
par Cyrano
Je ne crois pas que tu puisses sortir ce genre de résultat via une requête SQL: je peux me tromper, mais ce n'est pas la première fois que je vois ce problème et je n'ai jamais vu de solution directe.

Shéma sommaire d'une piste de solution :
La requête doit tout ramener classé par catégorie en premier (ORDER BY) Ensuite, il faut utiliser un pointeur qui va permettre à chaque affichage d'une nouvelle ligne de vérifier si on est sur la même catégorie que le tour précédent: si oui, on affiche les infos de l'article, sinon, on inscrit la nouvelle catégorie, on met à jour le pointeur et on affiche l'article et on reboucle.

Posté : 05 oct. 2005, 11:56
par Augure
ERRATUM :
Hum ..... je devrais à prendre à lire les autres avant de la ramener .... la même réponse et deux poste plus haut .... désolé :? :?

=======================================

Voici qq chose qui devrait t'aider. Utilise simplement une clause ORDER BY double et sans utiliser de clause GROUPE BY.

Sinon en effet ORDER BY prédomine sur le GROUP BY. Donc il n'est pas possible de trier les Groupe par Date.

Code : Tout sélectionner

create Table cat( id numeric identity, nom_categorie varchar(100) default 'xx' ); create table art ( id numeric identity, id_cat int, dt datetime default getdate()); insert cat (nom_categorie ) values ('cat1'); insert cat (nom_categorie ) values ('cat2'); insert cat (nom_categorie ) values ('cat3'); insert art (id_cat ) values (1); insert art (id_cat ) values (1); insert art (id_cat ) values (2); insert art (id_cat ) values (2); insert art (id_cat ) values (2); insert art (id_cat ) values (3); insert art (id_cat ) values (3); insert art (id_cat ) values (3); update art set dt = '2006/05/01' where id = 1; update art set dt = '2006/06/02' where id = 2; update art set dt = '2006/08/08' where id = 5; update art set dt = '2006/09/10' where id = 7; update art set dt = '2006/11/15' where id = 8; select cat.nom_categorie , art.id , art.dt from art join cat on art.id_cat = cat.id Order by art.id_cat , art.dt
Resultat

Code : Tout sélectionner

cat id dt - -------------------- -- cat1 2 Oct 10 2006 12:00AM cat1 1 Oct 19 2006 12:00AM cat2 3 Oct 5 2005 11:34AM cat2 4 Oct 5 2005 11:34AM cat2 5 Oct 20 2006 12:00AM cat3 6 Oct 5 2005 11:34AM cat3 7 Oct 22 2006 12:00AM cat3 8 Oct 30 2006 12:00AM