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

Requêtes MySQL Discussion :

Récupération de la dernière valeur de plusieurs champs


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 41
    Points : 17
    Points
    17
    Par défaut Récupération de la dernière valeur de plusieurs champs
    Bonjour à toutes et à tous, j'aimerai savoir s'il existait un moyen de récupérer la dernière valeur de plusieurs champs, le tout en une seule requête.

    Car j'arrive à obtenir le résultat souhaité mais en utilisant plusieurs requêtes!

    Merci d'avance pour vos réponses

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    1) Une table est composé de lignes et de colonnes.
    Les champs sont à la campagne ou dans les formulaires !

    2) Comment définis-tu "la dernière valeur" ? A priori, c'est celle qui est en BDD non ?

    3) Sans structure de la ou des tables, impossible de t'aider.

    4) Il faudrait aussi nous montrer que tu as essayé quelque chose, un premier essai de requête serait le bienvenu.
    On ne va quand même pas faire ton boulot à ta place !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    Bonjour cinéphil, voici le dernier code que j'ai utilisé.
    Je limite mon résult à 3 car je sais qu'il n'y a que 3 noms de conso différents.

    Cependant je souhaiterai pouvoir récupérer ce nombre et l'inclure directement dans cette requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    			$query = 	"SELECT val_conso, date_conso, type_conso, nom_conso
    				FROM matable
     
    				WHERE type_conso = 'USAGES'
     
    				ORDER BY date_conso DESC, nom_conso LIMIT 3"
     
    				or die('Impossible d\'exécuter la requête :' . mysql_error());		//Sinon ce message d'erreur s'affiche
    En tout cas je te remercie de prendre part à mon problème!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    // Un champ dans une BDD est aussi ce qu'on appelle attribut, ça n'existe pas que dans les campagnes, lol

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Si tu as juste besoin de savoir combien de lignes retrournera ta requête, mysql_numrows() en PHP fera très bien l'affaire !

    Pour le reste, ta requête me semble correcte, en quoi ne te satisfait-elle pas ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    En fait ce que je souhaite savoir c'est :

    Faut il que je réalise une 1ere requête pour obtenir le nombre d'attributs différents et le stocker dans une variable que je réutiliserai dans ma seconde requête au niveau du LIMIT.

    Ou est-il possible de tout faire en une seule requête?

    De plus, ce qui serait vraiment utile pour moi se serait de réaliser une unique requête me permettant de récupérer la première et la dernière valeur de chaque champ d'un coup

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Lis la phrase en bleu de ma signature et applique son principe car j'ai toujours du mal à comprendre ce que tu souhaites obtenir.

    Comment détermines-tu la première et la dernière valeur ?

    Dans les champs de quelle jolie campagne vas-tu te promener ?

    Quelle est l'instruction SQL pour ajouter "un champ" à une table ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE la_table
    ADD COLUMN la_colonne le_type
    CQFD !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    C'est vrai que ce n'est pas très clair, mon histoire!

    Pour faire simple, je possède une table :
    - "matable"
    composée de différents champs(ou attributs) :
    - id_conso,
    - type_conso,
    - nom_conso,
    - date_conso,
    - et val_conso

    Pour l'instant, dans ma table je ne possède pour le type_conso :"USAGES" que 3 noms de consommations différentes ("nom_conso1", "nom_conso2", "nom_conso3"). Mais dans un futur proche, j'en possèderai d'autres.

    Et donc ce que je souhaite savoir c'est : Est-il possible de réaliser une unique requête me permettant de récupérer la première et la dernière valeur de chaque consommation en une seule fois?

    Car pour l'instant, j'obtiens bien ce que je souhaite mais en réalisant plusieurs requêtes les unes à la suite des autres

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Novac
    Pour faire simple, je possède une table :
    - "matable"
    composée de différents champs(ou attributs) :
    NON des COLONNES !

    Citation Envoyé par Novac
    Est-il possible de réaliser une unique requête me permettant de récupérer la première et la dernière valeur de chaque consommation en une seule fois?
    Oui, mais, bis repetita :
    Citation Envoyé par CinéPhil
    Comment détermines-tu la première et la dernière valeur ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    La première valeur est celle qui possède la plus ancienne date et la dernière valeur est celle qui possède la date la plus récente

  10. #10
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Ben voilà ! On va y arriver à force !

    1) Quelles sont les date_conso mini et maxi par id_conso ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT id_conso,
        MIN(date_conso) AS date_min,
        MAX(date_conso) AS date_max
    FROM conso
    WHERE type_conso = 'USAGES'
    GROUP BY id_conso
    2) Quelles valeurs correspondent à ces dates pour chaque conso ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    SELECT c1.id_conso, c1.type_conso, c1.nom_conso, tmp.date_min, tmp.date_max,
        c1.val_conso AS val_conso_min, 
        c2.val_conso AS val_conso_max
    FROM (
        SELECT id_conso,
            MIN(date_conso) AS date_min,
            MAX(date_conso) AS date_max
        FROM conso
        WHERE type_conso = 'USAGES'
        GROUP BY id_conso
    ) tmp 
    INNER JOIN conso c1    
        ON tmp.id_conso = c1.id_conso
        AND tmp.date_min = c1.date_conso
    INNER JOIN conso c2
        ON tmp.id_conso = c2.id_conso
        AND tmp.date_max = c2.date_conso
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    Merci cinephil pour ta réponse.

    Par contre je suis d'accord avec toi sur le fait qu'on peut nommer les champs, colonnes mais je tiens réellement à te préciser que champ est aussi utilisé.

    cf : ftp://ftp2.developpez.be/developps/php/mysql.pdf
    et autres wikipedia et MySQL 5.0 Manual.

    Cordialement

  12. #12
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Ce n'est pas parce que certains informaticiens préféreraient être à la campagne que devant leur ordinateur qu'il faut les laisser employer de mauvais termes !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    Très bien, cinephil. Par contre, j'ai un souci avec ta requête car en fait elle me donne toutes les données comprises entre date_min et date_max!

  14. #14
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    les données comprises entre date_min et date_max!
    Ça me semble impossible puisqu'il y a une égalité avec date_min et date_max et non pas un BETWEEN !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    Pourtant c'est quand même bien ce que ça me fait. Et c'est vrai que c'est bizard

  16. #16
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    Apparemment ça serait un problème au niveau des dates, pour la sélection des dates : date_min et date_max

  17. #17
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    La colonne date_conso est bien de type DATE ?

    Tu peux donner la structure exacte de la table et un petit jeu de données pour qu'on puisse tester ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  18. #18
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    Voici la structure avec quelques données à titre d'exemple et merci de ton aide, c'est vraiment sympa!
    Images attachées Images attachées   

  19. #19
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    OK, c'est normal qu'on ait toutes les lignes puisque le GROUP BY est fait sur id_conso qui est la clé primaire de la table !

    Tu le veux par nom_conso ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    SELECT c1.id_conso, c1.type_conso, c1.nom_conso, tmp.date_min, tmp.date_max,
        c1.val_conso AS val_conso_min, 
        c2.val_conso AS val_conso_max
    FROM (
        SELECT nom_conso,
            MIN(date_conso) AS date_min,
            MAX(date_conso) AS date_max
        FROM conso
        WHERE type_conso = 'USAGES'
        GROUP BY nom_conso
    ) tmp 
    INNER JOIN conso c1    
        ON tmp.nom_conso = c1.nom_conso
        AND tmp.date_min = c1.date_conso
    INNER JOIN conso c2
        ON tmp.nom_conso = c2.nom_conso
        AND tmp.date_max = c2.date_conso
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  20. #20
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 41
    Points : 17
    Points
    17
    Par défaut
    C'est exactement ça!! Je te remercie, car ça fonctionne du tonnerre

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

Discussions similaires

  1. Concaténer les valeurs de plusieurs champs
    Par papa6 dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/07/2009, 13h12
  2. Réponses: 7
    Dernier message: 30/01/2008, 17h39
  3. Changer la valeur de plusieurs champs en utilisant for
    Par jpascal dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 19/11/2007, 18h28
  4. [SQL] récuperer la derniére valeur d'un champ autoincrément
    Par belakhdarbts dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 26/06/2006, 13h37
  5. [SQL] copier la valeur de plusieurs champs
    Par Ben_Le_Cool dans le forum Bases de données
    Réponses: 2
    Dernier message: 30/04/2006, 18h10

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