IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Récupérer la valeur Maximale d'un élément [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut Récupérer la valeur Maximale d'un élément
    Bonjour à tous,

    Afin d'optimiser les valeurs contenues dans ma base de données je souhaite réaliser une sélection spécifique, visant à récupérer la meilleure note obtenue par étudiants.

    Ma table est composée de 4 champs:
    - ID
    - Nom
    - Prenom
    - Resultat

    L'exercice pouvant être effectué plusieurs fois par les étudiants, nous obtenons plusieurs valeurs différentes de "Resultat".

    Comment puis je extraire le "Resultat" maximum obtenu par chacun des étudiants.

    Merci de votre compréhension.

    Cordialement
    Arnaud

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Bonjour,

    C'est quoi "un etudiant" dans ton cas, un couple nom/prénom ?
    Comment sont gerés les homonymes ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    L'étudiant et enregistré avec ses caractéristiques NOM Prénom ainsi que son numéro d'identifiant.

    voilà ce que ca donne dans ma table

    ID Nom Prénom Résultat
    184996 Vaivre Mikaël 8
    184996 Vaivre Mikaël 2
    184996 Vaivre Mikaël 0
    156895 Dupont Louis 5
    156895 Dupont Louis 2
    ...
    ...
    ...
    ...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 36
    Points : 43
    Points
    43
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT resultat FROM table WHERE id = 'id_de_ton_etudiant' ORDER BY resultat DESC LIMIT 1

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu devrais revoir la conception de ta base :

    une table pour les etudiants :
    id ; nom ; prenom

    une table pour les resultats :
    id ; etudiant_id ; resultat

    Actuellement tu repetes inutilement le nom et le prenom sur tous tes enregistrements avec tous les risques que cela implique comme une faute de frappe sur une des lignes.

    Ensuite pour le resultat maximal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(resultat) FROM t_resultat GROUP BY etudiant_id

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    SELECT resultat FROM table WHERE id = 'id_de_ton_etudiant' ORDER BY resultat DESC LIMIT 1

    C'est le "LIMIT 1" qui vas me sélectionner le premier résultat de mon étudiant, c bien ca...


    Merci de votre attention

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 36
    Points : 43
    Points
    43
    Par défaut
    Le limite 1 sert a retourner une ligne seulement.
    Mais entre la proposition de sabotage et la mienne, je ne sais pas laquelle est la plus efficace (niveau performance)

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    le MAX est logiquement plus rapide , le ORDER BY prenant la peine de classer toutes les lignes, ce qui ne nous sers pas.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 36
    Points : 43
    Points
    43
    Par défaut
    Ok merci, je m'en doutais un petit peu

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Je vais donc essayer ces deux méthodes, je reviendrais sur ce topic pour apporter les retour d'expérience

    Merci encore

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    En emloyant ces méthodes je n'arrive pas à atteindre mon objectif, je vais donc reformuler mes attentes:

    Voici ma table avec plusieurs etudiants

    175377 Fontanellaz Laurent 8
    175377 Fontanellaz Laurent 8
    175377 Fontanellaz Laurent 4
    175377 Fontanellaz Laurent 3
    175377 Fontanellaz Laurent 2
    175377 Fontanellaz Laurent 2
    175377 Fontanellaz Laurent 2
    175377 Fontanellaz Laurent 0
    178025 Aymonier Julie 7
    178025 Aymonier Julie 7
    178025 Aymonier Julie 5
    .
    .
    et ce pour l'ensemble des étudiants,

    Je souhaiterais isoler le meilleur résultat des étudiants comme ceci en limitant les redondance.

    175377 Fontanellaz Laurent 8
    178025 Aymonier Julie 7



    Merci de votre attention

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    et bien ca ne marche pas ce que je t'ai donné ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT nom,prenom,MAX(resultat) FROM t_resultat GROUP BY etudiant_id

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Merci encore pour votre aide cela marche sans problème,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query = "SELECT *,MAX(resultat) FROM ma_Table GROUP BY ID_etudiant";
    Il me suffisait d'associer la sélection générale SELECT *
    avec ma requête spécifique sur le champ à trier :
    SELECT *,MAX(resultat)


    Cependant j'observe une redondance lorsque l'étudiant possède 2 ou 3 fois la même meilleure note, ex ci dessous.

    174131 Lahbabi El Houcine 4
    174131 Lahbabi El Houcine 4

    est il possible d'intervenir sur la même requête ou faut il en créer une deuxième?

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    J'ai fais le test pour controler et je n'obtiens pas de doublon sur deux notes égales.

    Pourrais-tu nous faire un dump de la table ?

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Je ne trouve un doublon que sur un seul étudiant dont le n° d'identification c'est révéler être différent, cette éreur est désormais rectifier.

    Je souhaiterais cependant exporter les valeurs ainsi obtenues au sein d'une matrice CSV, est il possible d'exporter au format .csv depuis PHP?

  16. #16
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Oui, ca consiste en
    - lire la base
    - ecrire le csv avec fputcsv()

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    J'ai finalement opter pour une requette SQL sous PHP Myadmin


    Merci et bonne continuation

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSLT 1.0] Récupérer la profondeur maximale d'un élément
    Par Jerome Briot dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 10/03/2012, 20h25
  2. [JDOM] Récupérer la valeur de l'attribut d'un élément
    Par bidulee dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 06/05/2009, 12h13
  3. Récupérer la valeur de l'opacité d'un élément
    Par Tchupacabra dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/11/2008, 15h05
  4. Réponses: 17
    Dernier message: 08/08/2008, 20h13
  5. Réponses: 4
    Dernier message: 26/04/2006, 17h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo