Requete un peu spécial

Damien__42
Invité n'ayant pas de compte PHPfrance

04 oct. 2005, 18:08

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

Mammouth du PHP | 568 Messages

04 oct. 2005, 18:37

Tu peux donner la structure des 2 tables ?
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Damien__42
Invité n'ayant pas de compte PHPfrance

04 oct. 2005, 20:49

C'est une structure très simple :

Table Catégorie :
id - nom_categorie

Table Article :
id - nom_article - id_categorie - date_article

Merci encore !!!

Mammouth du PHP | 19672 Messages

04 oct. 2005, 21:05

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 ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Damien__42
Invité n'ayant pas de compte PHPfrance

04 oct. 2005, 22:55

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 :)

Mammouth du PHP | 568 Messages

04 oct. 2005, 23:33

Bin tu fais une requete récupérant la table des articles avec un order by sur l'id et la date :roll:
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Mammouth du PHP | 19672 Messages

04 oct. 2005, 23:33

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 91 Messages

05 oct. 2005, 11:56

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