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

Décisions SGBD Discussion :

Je trouve pas la requête qu'il me faut...


Sujet :

Décisions SGBD

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 41
    Points : 16
    Points
    16
    Par défaut Je trouve pas la requête qu'il me faut...
    Bonjour à tous,

    Je travaille sur une table qui a la structure suivante :

    Id Niveau Valeur

    1 3 A
    2 3 B
    3 3 C
    4 3 D
    5 4 E
    6 4 F
    7 5 G
    8 5 H
    6 5 I
    2 5 J

    Je voudrais ramener en une requête tous les Ids de cette table et la valeur associée pour le niveau le plus grand (et seulement pour ce niveau).

    La structure de la table n'est-elle pas la bonne pour résoudre ce genre de problème ?

    Merci pour votre aide.

  2. #2
    Membre averti Avatar de piff62
    Inscrit en
    Décembre 2003
    Messages
    431
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Décembre 2003
    Messages : 431
    Points : 417
    Points
    417
    Par défaut
    Tu ne pourra pas faire ce que tu souhaite en une seule requete (enfin je pense) mais en 2 oui ..
    Pour recuperer les ids :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT id from taTable GROUP BY id;
    Ca te donnera tous les id une et une seule fois

    Pour la valeur du plus haut niveau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT valeur,niveau FROM taTable where niveau = (select MAX(niveau) from taTable);
    Attention la premiere si tu as 2 niveaux qui ont le meme MAX .. ca va te renvoyer les 2

    Voila ce que moi je ferai

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 41
    Points : 16
    Points
    16
    Par défaut
    Merci pour ta réponse.

    La requête

    select MAX(niveau) from taTable (c'est à dire le sous select de ta seconde requête) ne va rammener que le plus grand niveau de la table c'est à dire 5. Je pense que la seconde requête ne ramènera donc que les valeurs de niveau 5.

    Après avoir cherché davantage la requête suivante répond presque à ma question :

    SELECT id_settings, MAX( Niveau )
    FROM settings
    GROUP BY id_settings

    Elle me rammène tous les Ids de la table de façon unique avec leur niveau le plus elevé trouvé, mais maintenant je ne sais comment rammener la valeur...

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT a.id , a.niveau , a.valeur 
    FROM test a 
    WHERE niveau = ( SELECT MAX(b.niveau) FROM test b 
    	  		   WHERE a.id=b.id )
    ORDER BY 1

  5. #5
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT a.id , a.niveau , a.valeur 
    FROM test a 
    WHERE niveau = ( SELECT MAX(b.niveau) FROM test b 
    	  		   WHERE a.id=b.id )
    ORDER BY 1

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 41
    Points : 16
    Points
    16
    Par défaut
    Merci, je pense effectivement que cette requête fonctionne, par contre je n'arrive pas à la tester sous MySQL. Apparemment il n'est pas possible d'exploiter le resultat d'un select dans une clause where, ce qui est assez étonnant et décevant... Du coup je ne peux même pas la tester...

    Merci quand même !

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 41
    Points : 16
    Points
    16
    Par défaut
    Je pense que cette requête fonctionne aussi :

    select id_settings, valeur
    from settings a , (select id_settings, max(niveau) from settings group by id_settings) b (b1, b2)
    where a.id_settings = b1
    and a.niveau = b2

    Mais ce n'est pas non plus possible de la tester sous MySQL (easyPHP). Ca vous parait normal ?

  8. #8
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    ca dépende la version de mYSQL

    je crois que si ta version est inférieur a la 4.3 , c'est pas bon

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 41
    Points : 16
    Points
    16
    Par défaut
    J'utilise la 4.0.15, on va dire que c'est ça, je vais installer EasyPHP 1.8 pour voir.

    Merci pour votre aide !

Discussions similaires

  1. [AC-2013] Runtime ne trouve pas les requêtes
    Par aleximan dans le forum Runtime
    Réponses: 1
    Dernier message: 17/01/2014, 22h23
  2. Requête SQL fausse et ne trouve pas l'erreur
    Par Netzo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/12/2012, 12h26
  3. il ne trouve pas une requête que j'ai créée
    Par Gabrieel dans le forum VBA Access
    Réponses: 7
    Dernier message: 07/11/2008, 17h08
  4. Ma requête contient une erreur, que je ne trouve pas
    Par adrien.ren dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/05/2008, 10h32
  5. Réponses: 2
    Dernier message: 12/09/2007, 21h47

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