[MySQL] Pb de tri avec une requete.

Pb de tri avec une requete. [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 23-02-2003 à 23:18:52    

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

Reply

Marsh Posté le 23-02-2003 à 23:18:52   

Reply

Marsh Posté le 24-02-2003 à 00:00:59    

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;


 
:)

Reply

Marsh Posté le 24-02-2003 à 01:12:13    

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

Reply

Marsh Posté le 24-02-2003 à 20:36:35    

alors, kkun?  :(

Reply

Marsh Posté le 24-02-2003 à 21:03:28    

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;


 
 :)

Reply

Marsh Posté le 25-02-2003 à 02:05:53    

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

Reply

Marsh Posté le 25-02-2003 à 04:39:08    

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

Reply

Marsh Posté le 25-02-2003 à 05:09:50    

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

Reply

Marsh Posté le 25-02-2003 à 12:12:17    

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

Reply

Marsh Posté le 25-02-2003 à 15:47:42    

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

Reply

Marsh Posté le 25-02-2003 à 15:47:42   

Reply

Marsh Posté le 25-02-2003 à 19:31:00    

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

Reply

Marsh Posté le 06-03-2003 à 21:05:28    

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)

Reply

Marsh Posté le 06-03-2003 à 21:52:43    

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 )

Reply

Marsh Posté le 06-03-2003 à 23:59:50    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed