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 :

condition sur deux champs parmi beaucoup


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 10
    Points : 6
    Points
    6
    Par défaut condition sur deux champs parmi beaucoup
    Bonjour,

    ma table consiste en une liste d'enregistrement correspondant à des modules. Chaque enregistrement comporte en attribut un identifiant puis une série de mesure d'une grandeur au cours du temps :

    module id | t0 | t1 | t2 | ... | tn
    1 | 0.9 | 0.8 | 0.9 | ... | 0.7
    2 | 0.4 | 0.7 | 1.0 | ... | 0.6
    3 | 0.9 | 0.8 | 0.9 | ... | 0.7
    4 | 0.8 | 0.4 | 0.8 | ... | 0.8

    et ainsi de suite.
    je cherche quelle requête me permetrait d'obtenir la liste des modules qui ont au moins deux valeurs inférieures à 0.9 parmi toutes les valeurs mesurées.

    Merci d'avance
    ET

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    La table n'est pas en formes normales, d'où les problèmes pour l'interroger.
    On devrait avoir une table
    module_id, module_rang,valeur
    La requête devient alors élémentaire :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT module_id
    FROM modules
    WHERE valeur < 0.9
    GROUP BY module_id
    HAVING COUNT(module_id) < 1

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Je crois comprendre, au lieu de lister toutes les mesures d'un module dans un seul enregistrement, je dois n'en stocker qu'en seul.

    Merci!

  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 : 61
    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 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Règle de gestion :
    Un module peut enregistrer plusieurs mesures et une mesure n'est enregistrée que par un module.

    MCD :
    Module -0,n----Enregistrer----1,1- Mesure

    Tables :
    Module (mod_id, ...)
    Mesure (mes_id, mes_id_module, mes_temps, mes_valeur)

    je cherche quelle requête me permetrait d'obtenir la liste des modules qui ont au moins deux valeurs inférieures à 0.9 parmi toutes les valeurs mesurées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT mes_id_module
    FROM Mesure
    WHERE mes_valeur < 0.9
    GROUP BY mes_id_module
    HAVING COUNT(*) > 1

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci pour cette réponse claire.
    Pourquoi ai-je besoin de deux tables? Je pourrais stocker l'identifiant du module pour chaque mesure. Non?

  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 : 61
    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 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par bluesmanu Voir le message
    Je pourrais stocker l'identifiant du module pour chaque mesure. Non?
    C'est exactement ce que j'ai suggéré :
    Mesure (mes_id, mes_id_module, mes_temps, mes_valeur)
    J'ai supposé qu'un module pouvait avoir d'autres informations qu'un simple identifiant et que ces informations pourraient logiquement être stockées dans une table des modules.

    La table des mesures reçoit alors une clé étrangère faisant référence à l'identifiant du module sur lequel est effectué la mesure.

Discussions similaires

  1. Conditions d'unité sur deux champs
    Par SPKlls dans le forum Langage SQL
    Réponses: 6
    Dernier message: 16/11/2008, 13h26
  2. Tri sur deux champs en même temps
    Par Azharis dans le forum Access
    Réponses: 8
    Dernier message: 11/01/2006, 13h10
  3. [MYSQL] Problème ORDER BY sur deux champs
    Par LE NEINDRE dans le forum Requêtes
    Réponses: 8
    Dernier message: 14/10/2005, 16h46
  4. pb avec select sur deux champs
    Par graphicsxp dans le forum Langage SQL
    Réponses: 7
    Dernier message: 22/03/2005, 15h30
  5. contrainte sur deux champs d'une table
    Par bdkiller dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 17/09/2004, 18h26

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