|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : juillet 2008 Messages : 6 ![]() |
bonjour,
je viens de réaliser un petit projet en utilisant une base de données mysql. j'ai regroupé mes résultats dans une table (test) alors cette table regroupe des identifiants des dates et des états de test un identifiant pourrait avoir plusieurs états selon la date donc un enregistrement peut avoir le meme identifiant qu'un autre et meme le meme état mais la date elle diffère. bref, je voudrais connaitre l'état de chaque identifiant à la première date de son test et son état a la date de son dernier test. voici ma requete sql : Code :
je ne trouve vraiment pas comment accéder a 2 résultats par identifiant l'un pour la date du premier test et l'autre pour la date du dernier. merci d'avance pour vos suggestions |
||
|
|
00
|
|
|
#2 | ||
![]() ![]() |
Avec une requête UNION peut-être :
Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : juillet 2008 Messages : 6 ![]() |
bonsoir,
merci pour votre soutien je viens de tester votre requête sql. en effet elle donne deux lignes par ident en plus les lignes sont décalées et surtout les champs(NULL) qui prennent la place de ce que apres (union 2 eme affichage) sera la date max et l'etat en cette date. je voulais reprendre le tout en effectuant un peu de gymnastique sur la requete: Code :
|
||
|
|
00
|
|
|
#4 | ||
![]() ![]() |
Alors utilisons plutôt deux sous-requêtes avec une jointure entre elles :
Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : juillet 2008 Messages : 6 ![]() |
rebonsoir,
encore merci pour votre précieuse aide (c'est mon premier post au début je voulais finir mon projet sans avoir recours aux forums developpez.com je viens de tester la nouvelle requete j'ai presque le meme resultat qu'avec la mienne, en effet dans le tableau affiché les deux etat affichés sont identiques et correspondent après vérification à l'état lors du test où la date est égale à min(datte)... je ne trouve vraiment plus d'explications pourtant ça me semblais assez logique d'afficher apres distinction des deux etats suivant la date ensuite en joignant les deux et ça marche pas, le problème persiste vraiment je suis bloqué là |
|
|
00
|
|
|
#6 | ||||
![]() ![]() |
En fait c'est logique ! (je fatigue aujourd'hui moi !)
Comme le GROUP BY est fait uniquement sur ident, il est bien capable de trouver le MIN(datte) et le MAX(datte) mais il prend le premier etat qu'il trouve donc il donne deux fois le même. C'est donc un peu plus compliqué. On va décomposer, comme ça j'explique en même temps. La requête ci-dessous donne le MIN(datte) et le MAX(datte) pour chaque ident : Code :
Code :
A voir si c'est parfaitement adapté à votre cas particulier.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||||
|
00
|
|
|
#7 | ||
|
Invité de passage
![]() Inscription : juillet 2008 Messages : 6 ![]() |
re,
enfin ça a marché merci pour toute votre aide depuis cet après-midi j'ai repris votre requete avec quelques modification puisque je voulais mettre la cerise sur le gateau et clore une fois pour le problème en affichant dans la dernière colonne le nombre de fois où on a testé l'état d'ident la requete après modification est donc : Code :
|
||
|
|
00
|
|
|
#8 | ||||
![]() ![]() |
Citation:
Citation:
Et le COUNT(tmp.ident) dans un GROUP BY tmp.ident donnera forcément 1. ![]() Expliquez-moi mieux votre nouveau besoin, avec un tableau de données par exemple. PS : comme vous n'utilisez pas les balises code et que vous avez ajouté le WHERE dans la sous-requête tmp à la suite du FROM, je ne l'avais pas vu. Même en le voyant, j'ai dû mal à saisir votre nouveau besoin.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||||
|
00
|
|
|
#9 | ||||||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 276 ![]() |
Salut,
Je pense que déplacer le count dans la sous-requête doit faire ce que tu veux : Code :
Citation:
Citation:
Code :
).En tout cas, certainement des valeurs correspondant souvent au min(datte) dans ton cas, surtout en période de test PS : Je précise que sélectionner des champs cachés dans le GROUP BY, est une très mauvaise pratique qui ne fonctionne que sous mysql, et qui est bien plus générateur d'erreurs qu'autres choses... Bien sûr, toutes précisions sur les "résultats inattendus" m'interessent |
||||||
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : juillet 2008 Messages : 6 ![]() |
bonjour,
merci a vous tous c'est bon cette fois-ci, le count génère les nombres voulus (j'ai testé pour plusieurs ident). remarque : en faisant "ORDER BY" j'ai eu plusieurs lignes par ident c'est ce qui explique le fait que je l'ai substitué par "GROUP BY". encore merci pour votre aide et la prochaine fois je serais bien meilleur que cette fois car je me forme par des tutoriels au fur et a mesure |
|
|
00
|
|
|
#11 | |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 276 ![]() |
Citation:
Si la requête te renvoie plusieurs lignes, c'est parce il y a des dates identiques, peut être est ce un champ date. Il faut donc faire autrement, mais n'utilise pas un GROUP BY avec des champs cachés ! |
|
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Inscription : juillet 2008 Messages : 6 ![]() |
bonsoir,
en fait j'avais fait le test en réseau de l'application et ça a été acceptée par mes encadreurs avec le group by cela dit pour ma propre culture j'en tiendrais compte dans mes projets a venir merci pour les conseils |
|
|
00
|
|
|
#13 | |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 276 ![]() |
Citation:
En fait, tu laisses le choix à mysql de favoriser un t2.etat ou un t1.Etat plutôt qu'un autre mais parmis des résultats justes, donc ça passe même si tu ne maîtrises pas tout Bonne continuation, et pense au
|
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com