Besoin d'aide pour une requete MySQL un peu spéciale (SELECT) - SQL/NoSQL - Programmation
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.
Marsh Posté le 02-06-2003 à 16:29:33
et non, pas en mysql
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()
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) |
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()
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) |
Marsh Posté le 02-06-2003 à 16:55:16
Info : MySQL ne supporte pas encore les sous-requêtes.
Merci de votre participation à tous
Marsh Posté le 02-06-2003 à 16:58:10
Taiche a écrit : Info : MySQL ne supporte pas encore les sous-requêtes. |
Il faut passer par des tables temporaires quand on veut faire ca?
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"; |
?
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.
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
++
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
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 ...
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 ? |
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.
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
++
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)
PHP s'installe facilement tout seul, MySQL itou. Faut juste savoir lire les install.txt ou readme.txt ; pas besoin d'EasyPHP.
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
++
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
Marsh Posté le 02-06-2003 à 19:14:43
skeye a écrit : |
il faut passer par un data model correct
Marsh Posté le 02-06-2003 à 20:07:14
Il faut utiliser having :
|
Appelez-moi dieu
Marsh Posté le 02-06-2003 à 20:09:26
La requête exacte :
select j1.nom |
Marsh Posté le 05-06-2003 à 20:50:06
MagicBuzz a écrit : Il faut utiliser having :
|
having existe sous MySQL?
Marsh Posté le 05-06-2003 à 20:52:56
Bon, c'est fini ces remontées de vieux topic ?
bascarol a écrit : |
http://www.mysql.com/documentation [...] #Reference
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