SELECT + autant de variable que de résultat

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : SELECT + autant de variable que de résultat

par Invité » 07 nov. 2007, 02:25

La documentation est pourtant assez bien illustrée quant à la façon de récupérer les valeurs retournées par une requête, et la solution de d0m devrait répondre à ton besoin ... au pire si tu ne veux pas utiliser de tableau et que tu es certain d'avoir 6 résultats à chaque fois (ce qui semble être le cas), tu peux lire tes 6 résultats directement, enregistrement par enregistrement :
$ligne = mysql_fetch_assoc($resultat); // 1er enregistrement
$carte1 = $ligne['nom_carte'];
$ligne = mysql_fetch_assoc($resultat); // 2ème enregistrement
$carte2 = $ligne['nom_carte'];
...
$ligne = mysql_fetch_assoc($resultat); // 6ème enregistrement
$carte6 = $ligne['nom_carte'];
Bon personnellement je ne vois pas trop l'intérêt d'utiliser une base de données pour stocker les valeurs d'un jeu de cartes, mais ça n'engage que moi :) Maintenant, je doute que ton "RAND BY 6" puisse retourner autre chose qu'une erreur SQL ...
C'est bon cette solution me convient parfaitement :)

Merci

par d0m » 06 nov. 2007, 17:02

Je fais essayer vos propositions dans la soirée.
Tu t'es vraiment cassé les dents sur cette requête on dirait....

par neo765 » 06 nov. 2007, 16:57

Salut,

Autant pour moi, il faut utiliser

Code : Tout sélectionner

ORDER BY RAND() LIMIT 6
Je vais essayer vos propositions dans la soirée.

Cordialement

par Ryle » 06 nov. 2007, 16:12

La documentation est pourtant assez bien illustrée quant à la façon de récupérer les valeurs retournées par une requête, et la solution de d0m devrait répondre à ton besoin ... au pire si tu ne veux pas utiliser de tableau et que tu es certain d'avoir 6 résultats à chaque fois (ce qui semble être le cas), tu peux lire tes 6 résultats directement, enregistrement par enregistrement :
$ligne = mysql_fetch_assoc($resultat); // 1er enregistrement
$carte1 = $ligne['nom_carte'];
$ligne = mysql_fetch_assoc($resultat); // 2ème enregistrement
$carte2 = $ligne['nom_carte'];
...
$ligne = mysql_fetch_assoc($resultat); // 6ème enregistrement
$carte6 = $ligne['nom_carte'];
Bon personnellement je ne vois pas trop l'intérêt d'utiliser une base de données pour stocker les valeurs d'un jeu de cartes, mais ça n'engage que moi :) Maintenant, je doute que ton "RAND BY 6" puisse retourner autre chose qu'une erreur SQL ...

par neo765 » 06 nov. 2007, 15:54

Salut,

Mon problème n'était pas un problème SQL ou javascript mais un problème php car il s'agit de récuperer les variables dans un script php.

Cordialement

par Hubert Roksor » 06 nov. 2007, 09:54

@neo765: tu as posté dans le mauvais forum. C'est écrit à l'écran au moment de poster, si ton problème concerne du Javascript ou du SQL alors il y a un forum spécial pour ça, c'est très démotivant de voir que personne ne fait l'effort de lire les règlements et consignes, et c'est difficilement excusable de la part de quelqu'un qui a 95 posts au compteur :?

Si tu avais posté dans le bon forum, tu aurais eu droit à quelques rappels utiles, comme par exemple ces quelques conseils de débogage, ou encore la nécessité de préciser quel SGBD tu utilises ainsi que sa version. Je n'ai aucune idée d'où sort ce RAND BY.

par d0m » 06 nov. 2007, 09:19

tu peux créer un tableau de cartes :
$tableau_cartes = array();

//requete SQL
$requete = "SELECT nom_carte FROM carte RAND BY 6";
//execution de la requete
$resultat = mysql_query($requete) or die (mysql_error());
//parcours des résultats
while($ligne = mysql_fetch_assoc($resultat)){
  //rangement dans le tableau
  $tableau_cartes [] = $resultat['nom_carte'];
}

SELECT + autant de variable que de résultat

par neo765 » 06 nov. 2007, 04:09

Salut,

Soit la table "carte" suivante :

| id | nom_carte |

Et la table "main" suivante :

| id | id_joueur | carte_1 | carte_2 | carte_3 | carte_4 |

J'aimerai, et c'est là ou je bloque, pouvoir extraire un certain nombre de carte dans la base par la requete suivante :

(* Chaque joueur à 2 cartes dans sa main, et 2 cartes sont communes à tous les joueurs, nous avons 2 joueurs dans la partie (2*2+2) *)

On sort alors 6 cartes au hasard de la table "carte".

Code : Tout sélectionner

"SELECT nom_carte FROM carte RAND BY 6"
$carte1, $carte2, $carte3, $carte4, $carte5, $carte6

(* les cartes $carte1 et $carte2 sont les cartes communes *)

Pour ensuite y ajouter dans la table "main" :

Pour le 1er joueur :

Code : Tout sélectionner

INSERT INTO main (id_membre, carte_1, carte_2, carte_3, carte_4) VALUES ($id1, $carte1, $carte2, $carte3, $carte4)
Pour le second joueur :

Code : Tout sélectionner

INSERT INTO main (id_membre, carte_1, carte_2, carte_3, carte_4) VALUES ($id2, $carte1, $carte2, $carte5, $carte6)
Mais voilà, je ne sais vraiment pas comment extraire les cartes, car à la sortie de la 1ère requete j'ai une boucle et je ne sais pas comment faire pour avoir autant de variable que de carte à la sortie.

Merci

Bien cordialement.