Besoin d'aide pour une requete MySQL un peu spéciale (SELECT)

Besoin d'aide pour une requete MySQL un peu spéciale (SELECT) - SQL/NoSQL - Programmation

Marsh Posté le 02-06-2003 à 16:19:05    

Bonjour à tous,
 
J'ai besoin d'aide pour effectuer une requête MySQL
 
Voici la table "joueurs" :
 


ID |  NOM  | ELIM | CHOIX
---+-------+------+------
 0 | NOM 1 |  0   |  4
 1 | NOM 2 |  1   |  3
 2 | NOM 3 |  0   |  4
 3 | NOM 4 |  0   |  2
 4 | NOM 5 |  0   |  2
 5 | NOM 6 |  1   |  1


 
La requete que j'aimerais faire est la suivante :
 
Selectionnez NOM depuis la table JOUEURS là où CHOIX à la valeur minimum et ou ELIM est égal à 0 et les classer aléatoirement
 
Pour le moment j'arrive à ça :
SELECT NOM FROM joueurs WHERE ELIM=0 ORDER BY rand()
 
Le seul pb est la partie "où CHOIX à la valeur minimum" ... dans l'expemple présent, j'aimerais qu'il me séléctionne les nom "NOM 4" et "NOM 5"...
 
Qqn peut il m'aider ?
 
Merci bcp...


Message édité par Dj YeLL le 02-06-2003 à 16:19:56

---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-06-2003 à 16:19:05   

Reply

Marsh Posté le 02-06-2003 à 16:28:02    

J'dirais ça :
SELECT NOM FROM (
   SELECT NOM, MIN (CHOIX) minChx from JOUEURS j where ELIM=0;
) where CHOIX = j.minChx ORDER BY rand();
à essayer.
 
EDIT : c peut être une pure connerie.


Message édité par El_gringo le 02-06-2003 à 16:30:00
Reply

Marsh Posté le 02-06-2003 à 16:29:33    

et non, pas en mysql  :D


---------------
.: Clône de Drasche .:. Ebichuleys .:. Avec l'Aloe Vera je fais de beaux cacas [:dawa] .: www.oserselancer.com :.
Reply

Marsh Posté le 02-06-2003 à 16:41:16    

perso je dirais :
 
SELECT NOM FROM joueurs WHERE ELIM=0 AND CHOIX=(select min(choix) from joueurs) ORDER BY rand()  

Reply

Marsh Posté le 02-06-2003 à 16:47:49    

Ca ne marche pas :( :
 

Erreur MySQL numéro: 1064 (Something is wrong in your syntax près de 'SELECT MIN(CHOIX) FROM joueurs) ORDER BY rand()' à la ligne 1)


Message édité par Dj YeLL le 02-06-2003 à 16:51:57

---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-06-2003 à 16:49:25    

scusi c :
 
SELECT NOM FROM joueurs WHERE ELIM=0 AND CHOIX IN (select min(choix) from joueurs) ORDER BY rand()

Reply

Marsh Posté le 02-06-2003 à 16:51:23    

Ca me donne tjs ça :
 

Erreur MySQL numéro: 1064 (Something is wrong in your syntax près de 'SELECT MIN(CHOIX) FROM joueurs) ORDER BY rand()' à la ligne 1)


 
 
:( :'(


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-06-2003 à 16:55:16    

Info : MySQL ne supporte pas encore les sous-requêtes.
Merci de votre participation à tous :jap:


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 02-06-2003 à 16:58:10    

Taiche a écrit :

Info : MySQL ne supporte pas encore les sous-requêtes.
Merci de votre participation à tous :jap:


Il faut passer par des tables temporaires quand on veut faire ca? :heink:

Reply

Marsh Posté le 02-06-2003 à 16:58:14    

Je devrais peut etre faire un truc du genre :
 

$query = "SELECT MIN(CHOIX) FROM joueurs WHERE ELIM=0";
$i = mysql_db_query('mabase', $query);
$query2 = "SELECT NOM FROM joueurs WHERE ELIM=0 AND CHOIX=$i";
$result = mysql_db_query('mabase', $query2);


 
 
?


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-06-2003 à 16:58:14   

Reply

Marsh Posté le 02-06-2003 à 17:04:36    

Presque (dans ton bout de code, $i sera un tableau donc ça marchera pas pile poil, faudra faire un mysql_fetch_array par exemple). Tu peux aussi faire une seule requête du genre SELECT * FROM matable WHERE ELIM=0
Puis à partir du tableau retourné, faire directement en PHP la récupération du min.
Y a plusieurs solutions, tout dépend de ce que tu préfères : faire une connexion supplémentaire à ta base ou faire mouliner ton CPU lors du parsing du PHP.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 02-06-2003 à 17:33:56    

Pfff ! J'y arrive pas ... c'est dingue qu'il n'y ait meme pas une fonction ds MySQL qui permet de selectionner une valeur en fonction de la plus petites valeur d'une colonne ... :(
 
Je vais essayer de me débrouiller autrement...
 
Merci à tous
 
++


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-06-2003 à 17:37:42    

Je viens d'avoir une autre idée ... je peux faire un SELECT sur la table, et faire un SORT BY CHOIX ... sélectionner la 1ere valeur (qui sera forcement la minimale) puis faire un SELECT avec WHERE CHOIX = la valeur trouvé prédédement ...
 
Mais c bien chiant :/


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-06-2003 à 17:39:39    

Sinon, je tourne en local ... il me semble que la derniere version de MySQL accepte les requetes imbriquées non ?
 
Si tel est le cas, je pourrais peut etre faire une mise à jour ...


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-06-2003 à 17:43:33    

Dj YeLL a écrit :

Sinon, je tourne en local ... il me semble que la derniere version de MySQL accepte les requetes imbriquées non ?
 
Si tel est le cas, je pourrais peut etre faire une mise à jour ...


Vérifie quand même sur le site de MySQL. Je crois que c'est à partir de la version 4 que c'est possible et c'est pas encore la version stable, donc fais gaffe.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 02-06-2003 à 17:53:42    

Bon, d'apres le site MySQL, c'est a partir de la 4.1alpha
 
Je suis en train de la telecharger ... mais obn, j'utilise EasyPHP, et ça m'etonnerait pas que ça merde apres la mise a jour ...
 
On verra bien
 
++


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-06-2003 à 17:59:14    

Faut toujours s'habituer à faire des installs soi-même sans passer par un package (dans la mesure du possible, hein) [:spamafote]
PHP s'installe facilement tout seul, MySQL itou. Faut juste savoir lire les install.txt ou readme.txt ; pas besoin d'EasyPHP.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 02-06-2003 à 18:10:05    

Je sais bien :)
 
En + c'est vraiment le seul truc pour lekel j'utilise un package... Je suis contre les pack en général, mais j'ai jamais eu à me plaindre de EasyPhp... et c'est tellement plus rapide.
 
Mais j'essayerais de faire une install manuelle quand j'aurais le tps (ou si la màj ne marche pas)
 
Merci
 
++


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-06-2003 à 18:44:45    

Voila, j'ai installé la v4.1a et ça marche a peu pres ... en fait EasyPHP n'arrive plus a le lancer et me met une erreur, mais si je le lance manuellement ça marche :) Je ferais une installe manuelle toute propre quand j'aurais + de tps ... la je fini le taff à 19h.
 
Bon, sinon je viens d'essayer la requete imbriquée et ça marche nickel !! Exactement comme je le voulais.
 
Alors merci @ tous :)


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 02-06-2003 à 19:14:43    

skeye a écrit :


Il faut passer par des tables temporaires quand on veut faire ca? :heink:  

il faut passer par un data model correct :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 02-06-2003 à 20:07:14    

Il faut utiliser having :
 


select v1.note, v1.u_login
from vote v1, vote v2
group by v1.note, v1.u_login
having v1.note = min(v2.note)


 
Appelez-moi dieu :ange:

Reply

Marsh Posté le 02-06-2003 à 20:09:26    

La requête exacte :
 

select j1.nom
from joueurs j1, joueurs j2
where j1.choix = 0
and j2.choix = 0
group by j1.elim, v1.nom
having v1.elim = min(v2.elim)


Message édité par MagicBuzz le 02-06-2003 à 20:10:12
Reply

Marsh Posté le 05-06-2003 à 20:11:20    

tout a fé daccord sur le MIN()  :D

Reply

Marsh Posté le 05-06-2003 à 20:50:06    

MagicBuzz a écrit :

Il faut utiliser having :
 


select v1.note, v1.u_login
from vote v1, vote v2
group by v1.note, v1.u_login
having v1.note = min(v2.note)


 
Appelez-moi dieu :ange:


 
having existe sous MySQL?
 


---------------

Reply

Marsh Posté le 05-06-2003 à 20:52:56    

Bon, c'est fini ces remontées de vieux topic ? :o
 

bascarol a écrit :


having existe sous MySQL?


http://www.mysql.com/documentation [...] #Reference


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 05-06-2003 à 22:03:43    


 
merci


---------------

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed