Select sur une variable ?

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 sur une variable ?

par Cyrano » 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 :)

par vins1892 » 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.

par heddicmi » 25 avr. 2005, 09:20

Si :
$a="blabla";

et que :
$b="a";

alors :
echo $$a;
donne à l'affichage :
blabla

par Cyrano » 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

par vins1892 » 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 ?

par vins1892 » 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,

par heddicmi » 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:

par Cyrano » 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");
    }
}
?>

par heddicmi » 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...

par vins1892 » 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]

par heddicmi » 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...

par vins1892 » 21 avr. 2005, 15:37

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

Je fais comment pour faire cela ?

par heddicmi » 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...

Select sur une variable ?

par vins1892 » 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 ?