SELECT + autant de variable que de résultat

Eléphant du PHP | 124 Messages

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.
Modifié en dernier par neo765 le 29 mai 2008, 23:12, modifié 1 fois.

d0m
Mammouth du PHP | 1141 Messages

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'];
}

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

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.

Eléphant du PHP | 124 Messages

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
Modifié en dernier par neo765 le 29 mai 2008, 23:12, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

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 ...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 124 Messages

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
Modifié en dernier par neo765 le 29 mai 2008, 23:12, modifié 2 fois.

d0m
Mammouth du PHP | 1141 Messages

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....

Invité
Invité n'ayant pas de compte PHPfrance

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