IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Calcul en php [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2006
    Messages : 132
    Points : 73
    Points
    73
    Par défaut Calcul en php
    Bonsoir,

    Je créé une table sql content 2 champ v1 et v2
    quand :
    v1 = 1
    v2 = 0


    et quand
    v1 = 0
    v2 = 1


    et j'aimerais enfaite savoir combien de fois dans v1 il ya la valeur 1 et combien de fois dans V2 il ya la valeur 1, mais le problème c'est que j'ai douze 0 qui s'affiche pour chacune des variables ( soit 24).
    A mon avis les douze 0 sont le nombre d'entrée dans la table mais pourquoi 0 ? et pourquoi il ne calcul pas que quand c'est supérieur a 0 ?

    Voila donc ce que j'ai créé pour le moment,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
    require("conf.inc.php");
     
            mysql_connect("$host", "$user", "$mdp");
            mysql_select_db("$data");
    $retour = mysql_query("SELECT * FROM br_sondage");
    while ($donnees = mysql_fetch_array($retour))
    {
     
    $requete = mysql_query("SELECT * FROM test") or die (mysql_error());
    $nb = mysql_num_rows($requete);
     
    $total_v1 =  (($v1 > 0)*$nb);
    echo  $total_v1;
     
    $total_v2 =  (($v1 > 0)*$nb);
    echo  $total_v2;
     
     
    }
     mysql_close();
    ?>
    Merci de votre aide

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $total_v1 =  (($v1 > 0)*$nb);
    ($v1 > 0) est une expression qui peut renvoyer soit TRUE soit FALSE.
    dans ton cas elle renvoit toujours FALSE puisque $v1 = FALSE n'etant initialisé nul part.
    Et (FALSE * x) = 0.

    Moi si je voulais compter des lignes dans une table j'utiliserais une requete avec count().

  3. #3
    Membre actif Avatar de Belegkarnil
    Inscrit en
    Juin 2005
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juin 2005
    Messages : 289
    Points : 205
    Points
    205
    Par défaut
    Tu as une table test qui contient 2 champs v1 et v2, et tu voudrais compter le nombre d'enregistrement où v1=1 et v2=1 ?

    Si j'ai bien compris, alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php
    require("conf.inc.php");
     
            mysql_connect("$host", "$user", "$mdp");
            mysql_select_db("$data");
    $retour = mysql_query("SELECT * FROM br_sondage");
    while ($donnees = mysql_fetch_array($retour))
    {
     
    $requete = mysql_query("SELECT * FROM test WHERE `v1`=1") or die (mysql_error());
    $total_v1 = mysql_num_rows($requete);
     
    $requete = mysql_query("SELECT * FROM test WHERE `v2`=1") or die (mysql_error());
    $total_v2 = mysql_num_rows($requete);
     
     
    }
     mysql_close();
    ?>
    Ou bien utiliser le SQL avec la fonction SELECT COUNT(*) AS 'nv1' FROM ...

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
      $sql = 'SELECT  \'v1\' AS type, count(v1) AS nombre
              FROM test
              WHERE v1 = 1
              UNION
              SELECT  \'v2\' AS type, count(v2) AS nombre
              FROM test
              WHERE v2 = 1';
      $result = mysql_query($sql);
      while ($item = mysql_fetch_array($result, MYSQL_ASSOC))
      {
        echo $item['type'] . ' => ' . $item['nombre'] . '<br>';
      }
    ?>
    devrait afficher (les valeurs sont des exemples) :
    v1 => 5
    v2 => 3

    Il y a peut-être plus optimisé, mais ça fonctionne.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2006
    Messages : 132
    Points : 73
    Points
    73
    Par défaut
    je suis bete de pas y avoir pensé sachant que j'en fais un juste avant avec$nb xD.

    Sinon pour vos script

    Belegkarnil, voila ce que sa me fait :
    manqué un echo ^^ cété mieu maissa fesait comme moi voici le résultat obtenu
    848484848484848484848484
    jeca, sa marche super, pourrait tu m'expliqué un peu ta syntaxe SQL et ceci stp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      {
        echo $item['type'] . ' => ' . $item['nombre'] . '<br>';
      }

    Merci de votre aide a tous

  6. #6
    Membre actif Avatar de Belegkarnil
    Inscrit en
    Juin 2005
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juin 2005
    Messages : 289
    Points : 205
    Points
    205
    Par défaut
    Alors il faut enlever le while(mysql_fetch... je ne connais pas la structure de tes tables.
    Qu'est-ce que tu ne comprends pas dans la syntaxe de jeca? Il créer deux requêtes pour avoir le nombre de v1 et v2, ensuite il uni les deux requêtes. En résultats, il y aura donc les valeurs pour v1, v2.

  7. #7
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Comme requête sql, il y a encore plus simple puisque v1 et v2 ne contiennent que des 0 ou des 1 (une seule requête et non deux union)...

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select sum(v1), sum(v2) from test

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2006
    Messages : 132
    Points : 73
    Points
    73
    Par défaut
    ce que je comprend pas c'est le truc des items

  9. #9
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    le code de jeca avec des explications :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?php
      // la 1ère requête sql compte le nombre d'enregistrements (count(v1))
      //  de la table test pour lesquels v1 = 1.
      //  cette requête retourne deux champs, le premier 'type' qui contient le texte "v1"
      //  et le deuxième 'nombre' qui contiens le nombre d'enregistrements.
      // Les résultats de cette première requête sont cumulés avec ceux
      //  d'une deuxième requête similaire grace au mot-clé UNION
      $sql = 'SELECT  \'v1\' AS type, count(v1) AS nombre
              FROM test
              WHERE v1 = 1
              UNION
              SELECT  \'v2\' AS type, count(v2) AS nombre
              FROM test
              WHERE v2 = 1';
      $result = mysql_query($sql);
      // On récupère le résultat dans un tableau associatif $item
      // Donc $item['type'] contiens la valeur du premier champs (v1 ou v2)
      //  et $item['nombre'] contiens la valeur du deuxième champs
      // (le nombre de v1 à 1 et le nombre de v2 à 1)
      while ($item = mysql_fetch_array($result, MYSQL_ASSOC))
      {
        echo $item['type'] . ' => ' . $item['nombre'] . '<br>';
      }
    ?>
    Si tu utilises la requête que je t'ai proposée, ça donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
      $sql = 'SELECT SUM(v1) AS sum_v1, SUM(v2) AS sum_v2 FROM test';
      $result = mysql_query($sql);
      // On récupère le résultat dans un tableau associatif $item
      // Donc $item['sum_v1'] contiens la somme du champs v1
      //  et $item['sum_v2'] contiens la somme du champs v2
      if ($item = mysql_fetch_array($result, MYSQL_ASSOC))
      {
        echo 'v1 => ' . $item['sum_v1'] . '<br>';
        echo 'v2 => ' . $item['sum_v2'] ;
      }
    ?>
    C'est plus clair comme ça ?

  10. #10
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2006
    Messages : 132
    Points : 73
    Points
    73
    Par défaut
    ok merci pour les explications la quels des deux formules me conseilleriez vous ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PostgreSQL] Calculs sous PHP ou dans fonctions PostgreSQL
    Par ilalaina dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/09/2008, 08h20
  2. Calcul en PHP sans bdd
    Par jb_du_ferret dans le forum Langage
    Réponses: 4
    Dernier message: 20/05/2008, 16h08
  3. [MySQL] Calculs en PHP / MySQL
    Par pasbonte dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/03/2008, 19h53
  4. [Conception] problème de calcul en php
    Par yannick29 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 01/10/2007, 08h32
  5. [MySQL] Fonctions calculs SQL/PHP pour projet football
    Par spamyx dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/04/2006, 16h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo