Select sur une variable ?

Eléphant du PHP | 89 Messages

20 avr. 2005, 23:31

Bonjour, je suis toujours sur mes requêtes sur les résultats du lotto (pour ceux qui ont lu mes posts sur le forum sql).

Maintenant que le requête SQL est coreectement définie, j'essaye de la transposer en php, mais ça ne fonctionne pas complètement, d'où mon post ci-dessous.


La requête suivante:

[php]<?

$db = mysql_connect ('localhost','root','');
mysql_select_db('lotto',$db);
$sql = 'select dtirage,count(*) from tirage_tbl where num in (17,18,19,20) group by dtirage';
$req = mysql_query($sql) or die ('erreur sql <br>'.$sql.'<br>.mysql_error()');
while($data = mysql_fetch_array($req))
{
echo $data['count(*)'].' bon(s) numero(s) le '.$data['dtirage'].'<br>';
}
mysql_close();
?>[/php]
me donne ceci:

1 bon(s) numero(s) le 1978-02-04
1 bon(s) numero(s) le 1978-02-11
2 bon(s) numero(s) le 1978-02-18
1 bon(s) numero(s) le 1978-02-25
1 bon(s) numero(s) le 1978-03-04
1 bon(s) numero(s) le 1978-03-11
1 bon(s) numero(s) le 1978-03-25

je voudrais ensuite connaître le nombre de tirage avec 1 bon numéro, 2 bons numéros ... soit:

6 tirages avec 1 bon numéro
1 tirage avec 2 bons numéros.

Je dois mettre le résultat de la 1ère requête dans une varible et ensuite faire un count(*) group by bons numeros, mais je ne vois pas comment faire (la variable bons numeros n'existe pas)

Quelqu'un peut-il m'aider ?

Mammouth du PHP | 568 Messages

21 avr. 2005, 09:46

Moi je dis, plutôt que de t'embêter à refaire une requête et vu que tu boucles sur les résultats de ta 1ère requête, créé un tableau ou alors une variable par nombre de bon résultat...

Lorsque ton $data['count(*)'] = 1, tu augmentes ton tableau[1] de 1
Lorsque ton $data['count(*)'] = 2, tu augmentes ton tableau[2] de 1
Lorsque ton $data['count(*)'] = 3, tu augmentes ton tableau[3] de 1
etc...
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 89 Messages

21 avr. 2005, 15:37

Oh là, j'suis débutant en php.

Je fais comment pour faire cela ?

Mammouth du PHP | 568 Messages

21 avr. 2005, 15:48

bof... Ca n'a rien à voir avec le php... C'est juste de la programmation...

quand tu fais ton :

Code : Tout sélectionner

while($data = mysql_fetch_array($req))
Tu parcours chaque résultat de ta requête...

Donc à chaque fois, en plus d'afficher d'afficher les résultats, tu contrôles la valeur de $data['count(*)'].
Et suivant le résultat, tu incrémentes une variable.
si data(count)=1, tu incrémentes $v1
si data(count)=2, tu incrémentes $v2
etc...

à la fin, tu sauras donc grâce ) $v1 combien de fois il y a eu 1 numéro, avec $v2 combien de fois il y a eu 2 numéro, etc...
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 89 Messages

21 avr. 2005, 17:02

Euh ...

La requête suivante ne fonctionne pas:

$sql = 'select dtirage,count(*) from tirage_tbl where num in (17,18,19,20) group by dtirage' and count(*) = 1;

dsl, mais je vois pas où je dois mettre la conditon.

J'ai fait une boucle car dans le bouquin que j'utilise, ils le font avec une boucle c'est peut-être pas la meilleure solution ...[/php]

Mammouth du PHP | 568 Messages

21 avr. 2005, 17:13

J'aime po devoir en arriver là, mais je vois que tu saisie po du tout ce que je veux dire... Ce n'est pas dans ta requête que tu dois aller chercher ça... c'est dans le parcours du résultat :
<? 

$db = mysql_connect ('localhost','root',''); 
mysql_select_db('lotto',$db); 
$sql = 'select dtirage,count(*) from tirage_tbl where num in (17,18,19,20) group by dtirage'; 
$req = mysql_query($sql) or die ('erreur sql <br>'.$sql.'<br>.mysql_error()'); 
// création d'un petit tableau 
$tab=array(0,0,0,0,0,0,0);
while($data = mysql_fetch_array($req)) 
{ 
echo $data['count(*)'].' bon(s) numero(s) le '.$data['dtirage'].'<br>'; 
// et ici je fais les comptes
$tab[$data['count(*)']]++;
} 
mysql_close(); 
?>
Au final, avec $tab[1] tu auras le total pour 1 numéros
$tab[2], pour 2 numéros, etc...
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Mammouth du PHP | 19672 Messages

22 avr. 2005, 13:55

Essaye avec ça :
<?
/* On va initialiser les nombre de bon numéros obtenus par tirage dans des variables */
$resultat_1 = 0;
$resultat_2 = 0;
$resultat_3 = 0;
$resultat_4 = 0;
$resultat_5 = 0;
$resultat_6 = 0;

$db = mysql_connect ('localhost','root','');
mysql_select_db('lotto',$db);
$sql = 'select dtirage,count(*) from tirage_tbl where num in (17,18,19,20) group by dtirage';
$req = mysql_query($sql) or die ('erreur sql <br>'.$sql.'<br>.mysql_error()');
while($data = mysql_fetch_array($req))
{
    echo $data['count(*)'].' bon(s) numero(s) le '.$data['dtirage'].'<br>';
    switch ($data['count(*)'])
    {
        case 1: $resultat_1++;
        break;
        case 2: $resultat_2++;
        break;
        case 3: $resultat_3++;
        break;
        case 4: $resultat_4++;
        break;
        case 5: $resultat_5++;
        break;
        case 6: $resultat_6++;
        break;
    }
}
mysql_close();

/* On va maintenant afficher s'il y en a le nombre de tirages avec 1, 2, 3, 4, 5 ou 6 bon numéros */
for($i = 1; $i <= 6; $i++)
{
    $resul_tirage = $resultat_.$i;
    if($resul_tirage != 0)
    {
        echo("<p>Nous avons ". $resul_tirage ." tirages avec ". $i ." bons numéros;</p>\n");
    }
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 568 Messages

22 avr. 2005, 14:00

Je suis po convaincu de l'intérêt de transmettre des réponses toute faite... :roll:

Il ne faux po oublier que c'est en forgeant qu'on devient forgeron... Et c'est vraiment adpatable... C'est en codant qu'on...... :wink:
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 89 Messages

22 avr. 2005, 14:33

A Cyrano, merci pour ton aide, je vois ce que ça donne ...

A Heddicmi, je viens d'avaler le bouquin php et mysql pour les nuls et ai accumulé une dizaine d'heures d'essais et erreur pour sortir 10 lignes de codes qui finalement ne conviennent pas ....
Ce bout de code me redonne courage pour la suite ...

J'espère que tu comprends ma position ...

A bientôt,

Eléphant du PHP | 89 Messages

25 avr. 2005, 09:08

Bonjour, je reviens sur le code proposé ci-dessus. Il y a un souci: il me dit que la variable $resultat_.$i n'est pas déclarée ...

Outre le message d'erreur sur la variable, il me ramène:

1 bon tirage avec 1 bon numéro
2 bon tirage avec 2 bons numéros
3 bon tirage avec 3 bons numéros
4 bon tirage avec 4 bons numéros
5 bon tirage avec 5 bons numéros
6 bon tirage avec 6 bons numéros.

Tu peux m'aider ?

Mammouth du PHP | 19672 Messages

25 avr. 2005, 09:16

Ouais, je crois bien que je me suis planté sur la création dynamique de variable... Pas sur, sais plus attends, faut que je regarde la doc là-dessus..., je vais revenir
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 568 Messages

25 avr. 2005, 09:20

Si :
$a="blabla";

et que :
$b="a";

alors :
echo $$a;
donne à l'affichage :
blabla
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 89 Messages

25 avr. 2005, 13:08

D'après la doc, la variable dynamique se déclare avec 2$$.

J'essaye ceci:

$resul_tirage = ${$resultat_}.[$i];

et vous dit quoi.

Mammouth du PHP | 19672 Messages

27 avr. 2005, 09:15

vins1892, sois gentil, pas de message privé pour du support, j'en donne déjà pas mal. Ceci dit, j'ai repris le bout de code et j'ai corrigé le problème en le prenant d'une autre manière. Au lieu de variable dynamique, j'utilise un tableau indexé. Le code revu et corrigé donne ceci:
<?
/* On va initialiser les nombre de bon numéros obtenus par tirage dans des variables */
$resultat = array(1=>0,2=>0,3=>0,4=>0,5=>0,6=>0);

$db = mysql_connect ('localhost','root','');
mysql_select_db('lotto',$db);
$sql = 'select dtirage,count(*) from tirage_tbl where num in (17,18,19,20) group by dtirage';
$req = mysql_query($sql) or die ('erreur sql <br>'.$sql.'<br>.mysql_error()');
while($data = mysql_fetch_array($req))
{
    echo $data['count(*)'].' bon(s) numero(s) le '.$data['dtirage'].'<br>';
    switch ($data['count(*)'])
    {
        case 1: $resultat[1]++;
        break;
        case 2: $resultat[2]++;
        break;
        case 3: $resultat[3]++;
        break;
        case 4: $resultat[4]++;
        break;
        case 5: $resultat[5]++;
        break;
        case 6: $resultat[6]++;
        break;
    }
}
mysql_close();

/* On va maintenant afficher s'il y en a le nombre de tirages avec 1, 2, 3, 4, 5 ou 6 bon numéros */
for($i = 1; $i <= 6; $i++)
{
    $resul_tirage = $resultat[$i];
    if($resul_tirage != 0)
    {
        echo("<p>Nous avons ". $resul_tirage ." tirages avec ". $i ." bons numéros;</p>\n");
    }
}
?>
Voilà, bonne continuation :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: