PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 19-08-2009 12:13:03

morgan47
Membre
Inscription : 19-08-2009
Messages : 52

[Résolu] Loterie : Compter le nombre de numéro trouvé.

Bonjour,
J'essai de créé une mini loterie pour un site. avec des gains dégréssif. (5 numéros trouvé = 2000 points, 4 numéros = 1000...)
J'ai codé toutes la partie utilisateur pour enregistrer les grilles.
La table avec les parties sont du type : idtirate | idmembre | grille
grille contient les numéros choisis par l'utilisateur de la forme XX-XX-XX-XX-XX

Dans la partie administration, j'ai codé le tirage aléatoire, mais maintenant je bloque pour compter pour chaque grille le nombre de numéro trouvé dans le désordre.

$tirage qui contient les numéros du tirage est de la forme xx,xx,xx,xx,xx

Je ne sais pas du tout comment faire pour compter les bon numéros.

si quelqu'un pouvait m'orienter?

Je vous en remercie d'avance.

Hors ligne

#2 19-08-2009 13:23:43

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : [Résolu] Loterie : Compter le nombre de numéro trouvé.

Bonjour,

faire ça, directement avec une requète mysql, je ne sais pas !

Je peux toutefois te proposer une méthode :

[code php]
<?php
// Le tirage sous la forme d'un tableau
$tirage = array(12, 54, 7, 99, 45);
// La grille sous la forme d'un tableau
$grille = array(2, 52, 7, 99, 41);
// On retourne le tableau des numéros communs aux deux tableaux précédents
$nums_en_commun = array_intersect($tirage, $grille);
// On compte le nombre de numéro dans ce dernier tableau
echo count($nums_en_commun);
?>
[/code]

Pour obtenir les tirages sous la forme d'un tableau à la place d'une chaine de caractères, tu utilises :

[code php]
<?php
// Obtenu depuis la base de données
$tirage_str = '12,54,07,99,45';
$grille_str = '2-52-7-99-41';
// Converti une chaine de caractère en tableau en utilisant le séparateur ','
$tirage = explode(',', $tirage_str);
// Converti une chaine de caractère en tableau en utilisant le séparateur '-'
$grille = explode('-', $grille_str);
?>
[/code]

Ce qui donne :

[code php]
<?php
function nb_bon_num($tirage_str, $grille_str){
    $tirage = explode(',', $tirage_str);
    $grille = explode('-', $grille_str);
    $nums_en_commun = array_intersect($tirage, $grille);
    return count($nums_en_commun);
}
?>
[/code]

Ensuite, il reste à parcourir toutes les grilles et d'appliquer cette fonction...ce qui est peut-être assez long :S

D'autre part, dans un soucis de cohérence, il faudrait peut-être mieux utiliser la même typographie pour les chaines de caractères, à savoir tiret ou virgule, et que il ne peut-être pas nécessaire de vouloir enregistrer '02' pour '2' puisque l'on traite des entiers !

Dernière modification par moijhd (19-08-2009 13:26:45)

Hors ligne

#3 19-08-2009 14:32:33

morgan47
Membre
Inscription : 19-08-2009
Messages : 52

Re : [Résolu] Loterie : Compter le nombre de numéro trouvé.

Merci pour ta réponse.
Je vais tester cela dessuite dans ma boucle while.

Pour l'histoire du 02 à la place du 2 c'est une histoire avec le javascript.

Hors ligne

#4 19-08-2009 14:38:03

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu] Loterie : Compter le nombre de numéro trouvé.

Saluton,
Une fois encore, le non-respect des formes normales dans la conception d'une base de données, débouche sur des problèmes pour écrire les requêtes.
La colonne grille contient une concaténation de 5 données élémentaires, les numéros joués. La table devrait être de la forme  idtirate, idmembre , choixchoix recevant chacune des valeurs choisies pour un tirage. La clé primiare de la table serait composée de l'ensemble des colonnes un choix ne pouvant intervenir qu'une fois pour le tirage d'un membre
La requête se ferait alors naturellement par comptage avec groupage sur idtirate, idmembre pour les lignes dont choix seraient dans $tirage.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 19-08-2009 14:43:39

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : [Résolu] Loterie : Compter le nombre de numéro trouvé.

Est ce que je peux voir à quoi ressemble une telle requete ?

Hors ligne

#6 19-08-2009 14:45:55

morgan47
Membre
Inscription : 19-08-2009
Messages : 52

Re : [Résolu] Loterie : Compter le nombre de numéro trouvé.

Maljuna Kris  j'avais pensé à une structure de ce genre.

Mais aprés je ne savais pas comment faire pour afficher chaque tirage du membre de la forme :
tirage 1 xx-xx-xx-xx-xx-xx
rirage 2 xx-xx-xx-xx-xx-xx

Hors ligne

#7 19-08-2009 15:53:38

morgan47
Membre
Inscription : 19-08-2009
Messages : 52

Re : [Résolu] Loterie : Compter le nombre de numéro trouvé.

Voila ma requète qui fonctionne :

$sql95 = "SELECT *,count(grille) as nbrnum FROM loterie_parties WHERE grille IN ($tirage_str) GROUP BY idmembre, idpartie";
$req95 = mysql_query($sql95) or die('Erreur SQL !'.$sql95.'<br>' . mysql_error());

while ($result = mysql_fetch_array ($req95))
{
  $idpartie = $result['idpartie'];
  $idmembre  = $result['idmembre '];
  $grille_str = $result['grille'];
  $nbrnum = $result['nbrnum'];

  echo "Numéro correspondant : $nbrnum : Grille : $grille_str | Tirage : $tirage_str<br>\n";
}

Attention, j'ai gardé le nom de grille pour la colonne, mais dedans est bien inséré un nombre par enregistrement
Par contre j'ai un problème pour afficher tous les numéro de la même grille.

Dernière modification par morgan47 (19-08-2009 15:59:56)

Hors ligne

#8 20-08-2009 07:07:39

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Résolu] Loterie : Compter le nombre de numéro trouvé.

morgan47 a écrit :

Maljuna Kris  j'avais pensé à une structure de ce genre.

Mais aprés je ne savais pas comment faire pour afficher chaque tirage du membre de la forme :
tirage 1 xx-xx-xx-xx-xx-xx
rirage 2 xx-xx-xx-xx-xx-xx

Il se trouve que MySQL propose une fonction native non-standard de la norme SQL, GROUP_CONCAT, qui réalise cette opération.
GROUP_CONCAT est aux colonnes de type VARCHAR, ce que SUM est aux colonnes numériques.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#9 20-08-2009 23:20:18

morgan47
Membre
Inscription : 19-08-2009
Messages : 52

Re : [Résolu] Loterie : Compter le nombre de numéro trouvé.

Merci beaucoup pour ton aide

Hors ligne

Pied de page des forums