Précédent   Forum des professionnels en informatique > Bases de données > Décisions SGBD
Décisions SGBD Forum de décisions sur le choix en bases de données. Le Comparatif
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 12/05/2005, 14h21   #1
Invité de passage
 
Inscription : mai 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 41
Points : 3
Points : 3
Envoyer un message via Yahoo à MyGoul
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.
MyGoul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 14h27   #2
Membre éclairé
 
Avatar de piff62
 
Inscription : décembre 2003
Messages : 431
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : décembre 2003
Messages : 431
Points : 362
Points : 362
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 :
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 :
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
piff62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 14h45   #3
Invité de passage
 
Inscription : mai 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 41
Points : 3
Points : 3
Envoyer un message via Yahoo à MyGoul
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...
MyGoul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 15h35   #4
Rédacteur/Modérateur
 
Inscription : janvier 2005
Messages : 2 320
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 320
Points : 2 368
Points : 2 368
Code :
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
Jaouad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 15h35   #5
Rédacteur/Modérateur
 
Inscription : janvier 2005
Messages : 2 320
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 320
Points : 2 368
Points : 2 368
Code :
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
Jaouad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 15h57   #6
Invité de passage
 
Inscription : mai 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 41
Points : 3
Points : 3
Envoyer un message via Yahoo à MyGoul
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 !
MyGoul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 16h01   #7
Invité de passage
 
Inscription : mai 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 41
Points : 3
Points : 3
Envoyer un message via Yahoo à MyGoul
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 ?
MyGoul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 16h17   #8
Rédacteur/Modérateur
 
Inscription : janvier 2005
Messages : 2 320
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 320
Points : 2 368
Points : 2 368
ca dépende la version de mYSQL

je crois que si ta version est inférieur a la 4.3 , c'est pas bon
Jaouad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2005, 16h29   #9
Invité de passage
 
Inscription : mai 2005
Messages : 41
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 41
Points : 3
Points : 3
Envoyer un message via Yahoo à MyGoul
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 !
MyGoul est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h38.


 
 
 
 
Partenaires

Hébergement Web