|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre à l'essai
![]() Inscription : septembre 2008 Messages : 102 ![]() |
Bonjour
s'il vous plait j'ai un probleme si vous pouvez m'aider?? j'ai une table qui contien plusieurs enregistrements des eleves jai un champh appelé date_ins il contient l'annee scolaire par exemple 2011/2012 ou bien 2010/2011, chaque eleve à plusieurs date_ins, je veux extraire un seul enregistrement pour chaque eleves qui contient la derniere annee qu'il a inscris. les deux champs de la table eleve: chapms1==>code_eleve champs2==>date_ins chaque eleve à plusieurs enregistrements d'aprés les années quil a inscri merci |
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé
![]() Inscription : mars 2005 Messages : 2 823 ![]() |
Code :
__________________
Un problème exposé clairement est déjà à moitié résolu Keep It Smart and Simple |
||
|
|
00
|
|
|
#3 |
|
Membre à l'essai
![]() Inscription : septembre 2008 Messages : 102 ![]() |
merci bcp pour la réponse
mais groupe by ques ce quelle fait exactement, est ce que je peut l'enlever?? |
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Inscription : mars 2005 Messages : 2 823 ![]() |
__________________
Un problème exposé clairement est déjà à moitié résolu Keep It Smart and Simple |
|
|
00
|
|
|
#5 |
|
Membre à l'essai
![]() Inscription : septembre 2008 Messages : 102 ![]() |
en réalité le code de l'eleve dans ma table est composé de 3 champs , donc je fait le groupe by sur les 3 champs" groupe by ch1,ch2,ch3???
|
|
|
00
|
|
|
#6 | |
|
Expert Confirmé
![]() Inscription : mars 2005 Messages : 2 823 ![]() |
Citation:
__________________
Un problème exposé clairement est déjà à moitié résolu Keep It Smart and Simple |
|
|
|
00
|
|
|
#7 |
|
Membre à l'essai
![]() Inscription : septembre 2008 Messages : 102 ![]() |
svp si vous avez le temps??
voilà un exemple d'une ptit table INS si vous pouvez l'essayer ////////////////////////////////////////////////////////////////////////////////////////////////////////// -- phpMyAdmin SQL Dump -- version 3.3.2 -- http://www.phpmyadmin.net -- -- Serveur: 127.0.0.1 -- Généré le : Dim 18 Septembre 2011 à 14:31 -- Version du serveur: 5.1.49 -- Version de PHP: 5.3.3 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; -- -- Base de données: `scolarite01` -- -- -------------------------------------------------------- -- -- Structure de la table `ins` -- CREATE TABLE IF NOT EXISTS `ins` ( `NPR` int(5) NOT NULL, `IANNEXE` varchar(2) NOT NULL, `IANNEEINS` varchar(4) NOT NULL, `INSEQ` varchar(5) NOT NULL, `IANNEE` varchar(9) NOT NULL, `ORDREC` int(5) NOT NULL, `ICODE` varchar(3) NOT NULL, `STATUT` varchar(16) NOT NULL, `DATEINS` date NOT NULL DEFAULT '0000-00-00', `FRAISINS` varchar(5) NOT NULL, `MODEPAIE` varchar(20) NOT NULL, `CATEGORIE` varchar(50) NOT NULL, `MOTIFINS` varchar(30) NOT NULL, `ANIMATION` int(1) NOT NULL DEFAULT '0', `INFORMATIQUE` int(1) NOT NULL DEFAULT '0', `COURRIER` varchar(20) NOT NULL, `MENTION` varchar(16) NOT NULL, `MODE` varchar(20) NOT NULL, `INSCRITBAC` varchar(1) NOT NULL DEFAULT '0', `STML` varchar(1) NOT NULL DEFAULT '0', PRIMARY KEY (`IANNEXE`,`IANNEEINS`,`INSEQ`,`IANNEE`), UNIQUE KEY `ordr_unq` (`IANNEE`,`ICODE`,`ORDREC`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -- Contenu de la table `ins` -- INSERT INTO `ins` (`NPR`, `IANNEXE`, `IANNEEINS`, `INSEQ`, `IANNEE`, `ORDREC`, `ICODE`, `STATUT`, `DATEINS`, `FRAISINS`, `MODEPAIE`, `CATEGORIE`, `MOTIFINS`, `ANIMATION`, `INFORMATIQUE`, `COURRIER`, `MENTION`, `MODE`, `INSCRITBAC`, `STML`) VALUES (0, '01', '2008', '00001', '2008/2007', 1, '312', 'جديد', '2007-09-19', '2000', 'Ø*والة', 'متمدرس', 'مواصلة الدراسة', 0, 0, '0', 'مقبول', 'بالمراسلة', '0', '0'), (0, '01', '2008', '00002', '2008/2007', 2, '312', 'جديد', '2007-09-29', '2000', 'Ø*والة', 'متمدرس', 'مواصلة الدراسة', 0, 0, '0', 'مقبول', 'بالمراسلة', '0', '0'), (0, '01', '2008', '00003', '2008/2007', 3, '312', 'جديد', '2007-09-15', '2000', 'Ø*والة', 'متمدرس', 'مواصلة الدراسة', 0, 0, '0', 'مقبول', 'بالمراسلة', '0', '0'), (0, '01', '2008', '00003', '2009/2008', 8, '312', 'جديد', '2007-09-15', '2000', 'Ø*والة', 'متمدرس', 'مواصلة الدراسة', 0, 0, '0', 'معيد', 'بالمراسلة', '0', '0'), (0, '01', '2010', '00004', '2008/2007', 4, '312', 'جديد', '2007-09-15', '2000', 'Ø*والة', 'متمدرس', 'مواصلة الدراسة', 0, 0, '0', 'بالمراسل', 'بالمراسلة', '0', '0'), (0, '01', '2008', '00004', '2009/2008', 9, '312', 'جديد', '2007-09-15', '2000', 'Ø*والة', 'متمدرس', 'مواصلة الدراسة', 0, 0, '0', 'معيد', 'بالمراسلة', '0', '0'), (0, '01', '2008', '00005', '2008/2007', 5, '312', 'جديد', '2007-09-05', '2000', 'Ø*والة', 'متمدرس', 'مواصلة الدراسة', 0, 0, '0', 'مقبول', 'بالمراسلة', '0', '0'), (0, '01', '2008', '00001', '2012/2011', 6, '404', 'جديد', '2007-09-15', '2000', 'Ø*والة', 'متمدرس', 'مواصلة الدراسة', 0, 0, '0', 'مقبول', 'بالمراسلة', '0', '0'), (0, '01', '2008', '00007', '2008/2007', 7, '312', 'جديد', '2007-11-05', '2000', 'Ø*والة', 'متمدرس', 'مواصلة الدراسة', 0, 0, '0', 'مقبول', 'بالمراسلة', '0', '0'), (0, '01', '2008', '00008', '2008/2007', 8, '312', 'جديد', '2007-09-15', '2000', 'Ø*والة', 'متمدرس', 'مواصلة الدراسة', 0, 0, '0', 'مقبول', 'بالمراسلة', '0', '0'); ////////////////////////////////////////////////////////////////////////////////////////////////////////// et voilà la requette que j'ai executé ////////////////////////////////////////////////////////////////////////////////////////////////////////// SELECT `IANNEXE` , `IANNEEINS` , `INSEQ` , icode, MAX( IANNEE ) FROM INS, ELEVE WHERE IANNEXE = ANNEXE AND IANNEEINS = ANNEEINS AND INSEQ = NSEQ GROUP BY IANNEXE, IANNEEINS, INSEQ ////////////////////////////////////////////////////////////////////////////////////////////////////////// mais ça n'a pas donné le résulta voulu car par exemple concernant l'enregistrement 01 2008 00001 312 2012/2011 normalement en 2012/2011 son ICODE est 404 pas 312 son ICODE 312 est dand l'annee 2007/2008 ////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
00
|
|
|
#8 | ||||
|
Expert Confirmé
![]() Inscription : mars 2005 Messages : 2 823 ![]() |
A partir de tes données j'ai fait :
Code :
Code :
__________________
Un problème exposé clairement est déjà à moitié résolu Keep It Smart and Simple |
||||
|
|
00
|
|
|
#9 |
|
Membre à l'essai
![]() Inscription : septembre 2008 Messages : 102 ![]() |
bonjour
oui justement c'est ce que j'ai eu, mais cet enregistrement dans la table il est comme ça: '01' '2008', '00001', '2012/2011', 6, '404' mais la requette l'affiche comme ça: '01' 2008 00001 312 2012/2011. c'est a dire dans la table le icode de cette enregistrement dans l'annee 2012/2011 est 404. tandisque la requette affiche le icode de cet enregistrement 312 en 2012/2011. alors que le icode 312 de cet enregistrement dans la table est en 2008/2007 donc il ne filtre pas le icode d'aprés l'annee , il donne le max de iannee et prend le premier icode de l'enregistrement comme il le trouve dans la table. j'espere que je vous ai bien expliqué le probleme. si vous pouvez m'aider. |
|
|
00
|
|
|
#10 | ||
![]() ![]() |
Tu viens de découvrir l'un des gros défaut de MySQL qui est trop permissif avec la norme SQL ! Un autre SGBD aurait refusé ta requête car toutes les colonnes figurant dans le SELECT et ne faisant pas l'objet d'une fonction de groupage (MIN, MAX, AVG, SUM, COUNT) doivent figurer dans le GROUP BY. Sinon les colonnes manquantes retourneront des résultats aléatoires.
Si tu veux récupérer le icode correspondant au MAX(IANNEE), il te faut alors une sous-requête : Code SQL :
__________________
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
|
|
|
#11 |
|
Membre à l'essai
![]() Inscription : septembre 2008 Messages : 102 ![]() |
merci pour votre réponse, j'espere que ça va marcher, je vais l'essayer maintenant
|
|
|
00
|
|
|
#12 |
|
Membre à l'essai
![]() Inscription : septembre 2008 Messages : 102 ![]() |
merci bcp pour la requete elle fonctionne bien , maisla table ins a d'autres champs il faut que les affiche ,
est ce que je peux remplacer cette ligne SELECT i.IANNEXE, i.IANNEEINS, i.INSEQ, i.icode, i.IANNEE par: SELECT i.* |
|
|
00
|
|
|
#13 |
![]() ![]() |
Non, il vaut mieux éviter de relancer la guerre des étoiles !
Mais tu peux ajouter d'autres colonnes (et pas champs !
__________________
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
|
|
|
#14 |
|
Membre à l'essai
![]() Inscription : septembre 2008 Messages : 102 ![]() |
daccord merci beaucoup vous m'avez vraiment aidé à resoudre un probleme de surcharge sur le serveur
merci bcp |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com