Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/09/2011, 13h42   #1
Invité régulier
 
Homme
Étudiant
Inscription : septembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2011
Messages : 19
Points : 5
Points : 5
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
Novac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 13h56   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
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 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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 14h17   #3
Invité régulier
 
Homme
Étudiant
Inscription : septembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2011
Messages : 19
Points : 5
Points : 5
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 :
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 :
// Un champ dans une BDD est aussi ce qu'on appelle attribut, ça n'existe pas que dans les campagnes, lol
Novac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 14h25   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
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 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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 15h13   #5
Invité régulier
 
Homme
Étudiant
Inscription : septembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2011
Messages : 19
Points : 5
Points : 5
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
Novac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 15h32   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
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 :
1
2
ALTER TABLE la_table
ADD COLUMN la_colonne le_type
CQFD !
__________________
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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 15h52   #7
Invité régulier
 
Homme
Étudiant
Inscription : septembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2011
Messages : 19
Points : 5
Points : 5
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
Novac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 16h01   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
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 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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 16h11   #9
Invité régulier
 
Homme
Étudiant
Inscription : septembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2011
Messages : 19
Points : 5
Points : 5
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
Novac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 16h22   #10
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Ben voilà ! On va y arriver à force !

1) Quelles sont les date_conso mini et maxi par id_conso ?
Code :
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 :
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 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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 16h31   #11
Invité régulier
 
Homme
Étudiant
Inscription : septembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2011
Messages : 19
Points : 5
Points : 5
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
Novac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 16h36   #12
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
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 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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 17h03   #13
Invité régulier
 
Homme
Étudiant
Inscription : septembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2011
Messages : 19
Points : 5
Points : 5
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!
Novac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 23h01   #14
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Citation:
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 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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 09h45   #15
Invité régulier
 
Homme
Étudiant
Inscription : septembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2011
Messages : 19
Points : 5
Points : 5
Pourtant c'est quand même bien ce que ça me fait. Et c'est vrai que c'est bizard
Novac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 10h39   #16
Invité régulier
 
Homme
Étudiant
Inscription : septembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2011
Messages : 19
Points : 5
Points : 5
Apparemment ça serait un problème au niveau des dates, pour la sélection des dates : date_min et date_max
Novac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 10h46   #17
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
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 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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 11h16   #18
Invité régulier
 
Homme
Étudiant
Inscription : septembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2011
Messages : 19
Points : 5
Points : 5
Voici la structure avec quelques données à titre d'exemple et merci de ton aide, c'est vraiment sympa!
Images attachées
Type de fichier : jpg img.JPG (80,2 Ko, 2 affichages)
Type de fichier : jpg img2.JPG (28,4 Ko, 2 affichages)
Novac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 12h01   #19
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
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 :
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 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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 12h36   #20
Invité régulier
 
Homme
Étudiant
Inscription : septembre 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2011
Messages : 19
Points : 5
Points : 5
C'est exactement ça!! Je te remercie, car ça fonctionne du tonnerre
Novac est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h51.


 
 
 
 
Partenaires

Hébergement Web