Classer une table avant GroupBy

Signaler
Messages postés
296
Date d'inscription
lundi 2 septembre 2002
Statut
Membre
Dernière intervention
28 janvier 2008
-
Messages postés
809
Date d'inscription
mercredi 11 octobre 2000
Statut
Membre
Dernière intervention
29 septembre 2010
-
Bonjour, la requete (ou plutot le bidouillage) ci-dessous fait un groupby apres la jointure



SELECT f.numFichier, adresse, taille, nomPublic, enConsultation,
modifier,dateModification FROM fichier f, dossierfichier df, dossier d

WHERE d.numDossier = '$numDossier'

AND d.numDossier = df.numDossier

AND df.numFichier = f.numFichier

GROUP BY f.numFichier

ORDER BY nomPublic



Mon probleme:

fichier(f) contient une liste de fichiers, et dossierfichier(df)
contient une liste des modifications de ces fichiers (id du fichier,
date de modif, id de l'intervenant).

Le but est de sortir une liste des fichiers avec les infos associées.

Mais, il recupere dans df la plus vieille ligne qui correspond à la
premiere modification du fichier. Hors, je dois afficher la date de la
"derniere" modif... Bref, il faudrait classer la jointure avant le
groupby



Merci pour votre aide
----
Olie_ze_kat - www.olid.fr.st =(°o°)=

8 réponses

Messages postés
285
Date d'inscription
jeudi 29 juillet 2004
Statut
Membre
Dernière intervention
27 juin 2006
1
Salut,

J'avais un ti soucis et je viens de voir le tiens...
Je croyais que c'était bidon mais en fait non.

Essai ça
SELECT f.numFichier, adresse, taille, nomPublic, enConsultation,
modifier,dateModification FROM fichier f, dossierfichier df, dossier d
WHERE d.numDossier = '$numDossier'
AND d.numDossier = df.numDossier
AND df.numFichier = f.numFichier
GROUP BY f.numFichier
ORDER BY dateModification ,nomPublic
Messages postés
296
Date d'inscription
lundi 2 septembre 2002
Statut
Membre
Dernière intervention
28 janvier 2008

Non, çà, çà trie le resultat apres le groupby... moi, je dois trier avant le groupby

merci qd meme

Olivier D. alias ze kat =(°o°)=
http://360.yahoo.com/olie_ze_kat
Messages postés
285
Date d'inscription
jeudi 29 juillet 2004
Statut
Membre
Dernière intervention
27 juin 2006
1
Hey je pense que j'ai trouvé, il suffit de faire une projection différente :

SELECT f.numFichier, adresse, taille, nomPublic, enConsultation,
modifier,MAX(dateModification) as dateDerniereModification
FROM fichier f, dossierfichier df, dossier d

WHERE d.numDossier = '$numDossier'
AND d.numDossier = df.numDossier
AND df.numFichier = f.numFichier

GROUP BY f.numFichier

ORDER BY nomPublic

Je pense que ça doit rouler ?
Messages postés
296
Date d'inscription
lundi 2 septembre 2002
Statut
Membre
Dernière intervention
28 janvier 2008

J'ai essayé, mais la commande Max() semble ne pas marcher sur des champs Date (format mySQL jj-jj-jj hh:hh:hh)

Je crois que le seul moyen d'en sortir, çà va etre de refaire leur appli en decomposant en plusieurs requetes... La table df est bizarre ; elle contient des references vers f et d pour, - en meme temps -, definir les fichiers dun dossier et aussi faire l'historique des modifs !!!

.oO(encore un soft fait par un tordu du ciboulo)

Olivier D. alias ze kat =(°o°)=
http://360.yahoo.com/olie_ze_kat
Messages postés
285
Date d'inscription
jeudi 29 juillet 2004
Statut
Membre
Dernière intervention
27 juin 2006
1
Je sais comment tu peux faire....
En fait s'il ne connait pas le max des dates... tu n'as qu'à lui faire faire le max d'un nombre...
Tu fais un MAX d'une date formatté comme ceci :
MAX(
DATE_FORMAT(date,'
%Y
%m
%d
%H
%i
%s
%f
))

Je pense que ça devrait le faire... 
Messages postés
296
Date d'inscription
lundi 2 septembre 2002
Statut
Membre
Dernière intervention
28 janvier 2008

Perdu... Le MAX() dans le SELECT s'applique au resultats APRES le groupby :o((

J'ai essayé sans succes un:
GROUP BY f.numFichier HAVING dl.dateModification = (SELECT MAX(TODAY(dateModification) WHERE ...))

Zart, je te remercie pour ton obstination, mais je vais faire 3 SELECT séparés pour résoudre le pb... On a assez perdu de temps avec ce truc malfoutu ;op
Messages postés
809
Date d'inscription
mercredi 11 octobre 2000
Statut
Membre
Dernière intervention
29 septembre 2010
9
Salut,

je comprends pas trop ton emploi du Group By, perso j'aurais fait :

SELECT f.numFichier, adresse, taille, nomPublic, enConsultation, modifier, MAX(dateModification) as dateDerniereModification

FROM fichier f, dossierfichier df, dossier d

WHERE d.numDossier = '$numDossier'
AND d.numDossier = df.numDossier
AND df.numFichier = f.numFichier

ORDER BY nomPublic

GROUP BY f.numFichier, adresse, taille, nomPublic, enConsultation, modifie

Le max() d'une date fonctionne bien en MySQL.. le bug est donc ailleur..

++

Zlub
Messages postés
809
Date d'inscription
mercredi 11 octobre 2000
Statut
Membre
Dernière intervention
29 septembre 2010
9
Re Salut,

Oups erreur copier / coller ;)

SELECT f.numFichier, adresse, taille, nomPublic, enConsultation, modifier, MAX(dateModification) as dateDerniereModification

FROM fichier f, dossierfichier df, dossier d

WHERE d.numDossier = '$numDossier'
AND d.numDossier = df.numDossier
AND df.numFichier = f.numFichier

GROUP BY f.numFichier, adresse, taille, nomPublic, enConsultation, modifier

ORDER BY nomPublic;

++

Zlub