Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1297 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Pb de tri avec une requete.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL] Pb de tri avec une requete.

n°316069
APLC
Corporation & Company Ltd
Posté le 23-02-2003 à 23:18:52  profilanswer
 

Voici la structure de ma table:
 Fiche                   historique
-------                  ----------
id_fiche                 id_fiche
...                      Etat_fiche
caractéritiques          date
diverses                 ...
...
 
Dans ma requete principale, j'affiche l'ensemble des fiches, avec la possibilité de trier le résultat (parametre $tri).
je trie donc par n° de fiche, puis par les principales caractéristiques.
Je voudrais pouvoir trier le résultat par le dernier état de la fiche, visible dans la table historique.
 
Quelqu'un aurait il une idée? (je tourne en rond depuis hier soir  :??: ... )

mood
Publicité
Posté le 23-02-2003 à 23:18:52  profilanswer
 

n°316085
Core 666
Posté le 24-02-2003 à 00:00:59  profilanswer
 

Tu devrais pouvoir t'en sortir ainsi, si j'ai bien compris ce que tu veux faire :
 

SELECT t1.id_fiche FROM Fiche AS t1, historique AS t2 WHERE t1.id_fiche = t2.id_fiche ORDER BY t1.id_fiche, t1.caractéritiques, t2.Etat_fiche;


 
:)

n°316107
APLC
Corporation & Company Ltd
Posté le 24-02-2003 à 01:12:13  profilanswer
 

Euh, non, en fait, c'est pas ca:
le fait de trier par n° de fiche et principales caractéristiques, ca, c'est OK.
 
maintenant je veux simplement trier par état_fiche de l'historique. le problème vient du fait que dans l'historique, une fiche peut avoir plusieurs états, et comme je veux l'état en cours, il faut prendre la ligne ou la date est la plus récente.
 
Voici ce que j'ai actuellement, et qui ne marche pas:
 


SELECT f.id_fiche, h.etat_fiche, MAX(h.date) AS datemax
FROM fiche f  
LEFT JOIN historique h ON h.id_fiche=f.id_fiche
WHERE h.date=datemax
GROUP BY h.id_fiche
ORDER BY h.etat_fiche";


 
a mon avis, ce qui chie, c'est le WHERE h.date=datemax
mais je vois pas comment le remplacer...  :pfff:  
une idée quelqu'un???

n°316858
APLC
Corporation & Company Ltd
Posté le 24-02-2003 à 20:36:35  profilanswer
 

alors, kkun?  :(

n°316884
ultraglab
Posté le 24-02-2003 à 21:03:28  profilanswer
 

aplc a écrit :

Euh, non, en fait, c'est pas ca:
le fait de trier par n° de fiche et principales caractéristiques, ca, c'est OK.
 
maintenant je veux simplement trier par état_fiche de l'historique. le problème vient du fait que dans l'historique, une fiche peut avoir plusieurs états, et comme je veux l'état en cours, il faut prendre la ligne ou la date est la plus récente.
 
Voici ce que j'ai actuellement, et qui ne marche pas:
 


SELECT f.id_fiche, h.etat_fiche, MAX(h.date) AS datemax
FROM fiche f  
LEFT JOIN historique h ON h.id_fiche=f.id_fiche
WHERE h.date=datemax
GROUP BY h.id_fiche
ORDER BY h.etat_fiche";


 
a mon avis, ce qui chie, c'est le WHERE h.date=datemax
mais je vois pas comment le remplacer...  :pfff:  
une idée quelqu'un???


 
bon, je débute en SQL, mais je te propose quand meme ca:  
 


SELECT f.id_fiche, h.etat_fiche
FROM fiche f, historique h
WHERE h.id_fiche=f.id_fiche AND h.date=(SELECT max(date) FROM historique)
GROUP BY h.id_fiche
ORDER BY h.etat_fiche;


 
 :)

n°317043
APLC
Corporation & Company Ltd
Posté le 25-02-2003 à 02:05:53  profilanswer
 

Merci pour ta réponse, mais j'crois pas que ca puisse marcher: mysql ne permet pas les sous requetes imbriquées, à moins que je me trompe...  :(

n°317044
Tetedeienc​h
Head Of God
Posté le 25-02-2003 à 04:39:08  profilanswer
 

aplc a écrit :

Merci pour ta réponse, mais j'crois pas que ca puisse marcher: mysql ne permet pas les sous requetes imbriquées, à moins que je me trompe...  :(  


 
Tu te trompes ...
 
C'est tellement basique comme truc que cela me ferai vraiment sursauter...
 
Et surtout ca evite les joins merdiques plutot gros en memoire...

n°317046
Zzozo
Un peu, passionément, à la fol
Posté le 25-02-2003 à 05:09:50  profilanswer
 

Tu es quasiment obligé de faire ca en deux étapes (de facon explicite ou implicite) :
1/ Déterminer la dernière date pour chaque fiche
2/ Faire la jointure

n°317303
Core 666
Posté le 25-02-2003 à 12:12:17  profilanswer
 

tetedeiench a écrit :


 
Tu te trompes ...
 
C'est tellement basique comme truc que cela me ferai vraiment sursauter...


J'espère que le plafond est pas trop haut chez toi, sinon tu vas choper une belle bosse :D
 
Même MySQL 4 ne gère pas les subselects. Il va encore falloir attendre encore un peu : http://www.mysql.com/press/release_2003_05.html

n°317512
APLC
Corporation & Company Ltd
Posté le 25-02-2003 à 15:47:42  profilanswer
 

arg, c bien ce ki me semblait...  :sweat:  
alors seule une méthode nécessitant 2 requete peut faire l'affaire?
a la limite, ca irait si j'avais que quelques enregistrements, mais si la table devient plus importante, ca va en faire des requetes... ;-(

mood
Publicité
Posté le 25-02-2003 à 15:47:42  profilanswer
 

n°317715
ultraglab
Posté le 25-02-2003 à 19:31:00  profilanswer
 

aplc a écrit :

Merci pour ta réponse, mais j'crois pas que ca puisse marcher: mysql ne permet pas les sous requetes imbriquées, à moins que je me trompe...  :(  


 
ha, je savais pas
j'aurais au moins apris ca aujourd'hui  :D

n°325119
joce
Architecte / Développeur principal
"BugHunter"
Posté le 06-03-2003 à 21:05:28  profilanswer
 

juste par curiosité, t'as essayé de changer le WHERE en HAVING (mais j'ai peu d'espoir sans subselect, 4.1 est ton ami :D)

n°325167
mrbebert
Posté le 06-03-2003 à 21:52:43  profilanswer
 

Y a peut être moyen de s'inspirer de ce qui se fait ici :)  
http://www.mysql.com/doc/en/exampl [...] p-row.html
 
(attention, c'est pas simple :D )

n°325455
APLC
Corporation & Company Ltd
Posté le 06-03-2003 à 23:59:50  profilanswer
 

> Joce
En effet, le Having ne marche pô mieux...
 
>MrBebert
 :jap: Merci pour ton lien... ca a l'air d'être ca... la solution...
je testerai ça ce weekend... (même si ça a l'air plutôt moche ;) )


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Pb de tri avec une requete.

 

Sujets relatifs
[Concours] Votre Requête MySQL la plus complexeComment créer des relations,cardinalités entre les tables en mysql??
Comment créer des relations,cardinalités entre les tables en mysql??Existe-t-il qqch comme EasyPHP qui marche avec PostGres ? (pas MySQL)
MySql : Alter Table ....ADDliste deroulant qui fait une requete
Requête SQL toute simple.... AIDE SVP[MySQL] Peut on se connecter avec 2 bases de données en meme tps????
[PHP] faire une requete sur une "plage d'ip"... 
Plus de sujets relatifs à : [MySQL] Pb de tri avec une requete.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR