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 :

calul SUM et tri


Sujet :

PHP & Base de données

  1. #21
    Membre éclairé Avatar de Meloooo
    Femme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 324
    Par défaut
    Essayes d'exécuter ta requête et de faire un echo tout simplement ou de faire ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $variable=mysql_result($somme,0)

  2. #22
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 265
    Par défaut
    elle me sert a recuperer l'id du truc non ?

    si je l'enleve :

    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 COUNT(nombre) as masomme FROM (
     SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS tablecompte
     INNER JOIN inscriptevent on inscriptevent.id_event = tablecompte.id_event
    GROUP BY inscriptevent.nombre
    order by COUNT(nombre) ASC";
    $somme = mysql_query($sql,$cnx) or die ('Erreur : '.mysql_error() ); 
    $detail = mysql_fetch_array($somme);  
     
    echo '<hr>';
    echo $detail['masomme'];
    echo $donnees['titre'];
    ?>
    retourne : 1
    Notice: Undefined variable: donnees in /home/groskane/public_html/matthieu/fr/best_event.php on line 52

  3. #23
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    En fait, avec ma requête, tu n'as plus besoin que d'une seule requête, donc:
    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
     
    <?php
    $retour = mysql_query("SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive'  ");
    while ($donnees = mysql_fetch_array($retour)){
    $id_event = $donnees['id_event'];
     
    $sql = "SELECT COUNT(nombre) as masomme FROM (
     SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS tablecompte
     INNER JOIN inscriptevent on inscriptevent.id_event = $id_event
    GROUP BY inscriptevent.nombre
    order by COUNT(nombre) ASC";
    $somme = mysql_query($sql,$cnx) or die ('Erreur : '.mysql_error() ); 
    $detail = mysql_fetch_array($somme);  
     
     
    echo '<hr>';
    echo $detail['masomme'];
    echo $donnees['titre'];
    }
    ?>
    Devient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $sql = "SELECT COUNT(nombre) as masomme FROM (
     SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS tablecompte
     INNER JOIN inscriptevent on inscriptevent.id_event = $id_event
    GROUP BY inscriptevent.nombre
    order by COUNT(nombre) ASC";
     
    $retour = mysql_query($sql) or die(mysql_error());
     
    while ($donnees = mysql_fetch_array($retour)){
    echo "<hr>";
    echo $donnees['masomme'];
    }
    J'ai simplifié un peu l'affichage, mais en théorie, ça devrait fonctionner.

  4. #24
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 265
    Par défaut
    oui mais la du coup dans ton dernier code, je n'ai plus $id_event

    du coup, comment tout recuperer ?

  5. #25
    Membre éclairé Avatar de Meloooo
    Femme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 324
    Par défaut
    Dans la jointure, il y a $id_event, donc non à mon avis ca risque pas de marcher étant donné que la variable n'est déclarée nulle part.
    Je pense qu'il faut simplement remplacer cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     INNER JOIN inscriptevent on inscriptevent.id_event = $id_event
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INNER JOIN inscriptevent on inscriptevent.id_event = event.id_event

  6. #26
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 265
    Par défaut
    en mettant ca me retourne : Unknown column 'event.id_event' in 'on clause'

  7. #27
    Membre éclairé Avatar de Meloooo
    Femme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 324
    Par défaut
    Parce ce que j'ai mis ne doit pas correspondre à ce que tu à toi dans la base de données.

  8. #28
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    Dans ce cas, c'est parce que la colonne de la table event qui contient l'identificateur de l'événement ne s'appelle pas id_event. Regarde dans ta table et trouve le bon nom de champs .

  9. #29
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 265
    Par défaut
    heu si dans les deux tables j'ai bien id_event

  10. #30
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    Ah, c'est vrai, il faut que tu utilises l'alias de la table que tu as créé, donc:

    tablecompte.id_event

  11. #31
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 265
    Par défaut
    donc ca nous fait :

    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
     
    <?php
     
    $sql = "SELECT COUNT(nombre) as masomme FROM (
     SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS tablecompte
     INNER JOIN inscriptevent on inscriptevent.id_event = tablecompte.id_event 
    GROUP BY inscriptevent.nombre
    order by COUNT(nombre) ASC";
     
    $retour = mysql_query($sql) or die(mysql_error());
     
    while ($donnees = mysql_fetch_array($retour)){
    echo "<hr>";
    echo $donnees['masomme'];
    echo $donnees['titre'];
    }
     
    ?>
    mais le calcul ne semble pas juste, et $donnees['titre']; genere une erreur..

  12. #32
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    $donnees['titre'] donne une erreur parce qu'il ne fait pas partie de la liste de champs que tu récupères de la Base de données.

    Rajoute le simplement au début:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(nombre) as masomme, Titre FROM.....
    Pour ce qui est du résultat qui est erroné, il nous est difficile de pouvoir t'aider sans que tu sois un peu plus précis.

  13. #33
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 265
    Par défaut
    bon :

    voila les structures des deux tables :

    la table inscriptevent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    inscriptevent
      `id_inscription`
      `id_event` 
      `username` 
      `nombre` 
      `participer`
      `voir` 
      `valider`
    La table event :

    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
    25
    26
    27
    28
    29
     
     
      `id_event` 
      `titre` 
      `theme` 
      `descriptif`
      `jour` 
      `mois` 
      `etat` 
      `user` 
      `adresse` 
      `ville` 
      `pays`
      `valider` 
      `jourf` 
      `moisf`
      `okfin`
      `place`
      `placedispo` 
      `inscription`
      `img`
      `heure`
      `minute` 
      `tag` 
      `categorie` 
      `annee`
      `anneef`
      `numero_group` 
      `titre_base`
    le code :
    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
     
    <?php
     
    $sql = "SELECT COUNT(nombre) as masomme, titre FROM (
     SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS tablecompte
     INNER JOIN inscriptevent on inscriptevent.id_event = tablecompte.id_event 
    GROUP BY inscriptevent.nombre
    order by COUNT(nombre) ASC";
     
    $retour = mysql_query($sql) or die(mysql_error());
     
    while ($donnees = mysql_fetch_array($retour)){
    echo "<hr>";
    echo $donnees['masomme'];
    echo $donnees['titre'];
    }
     
    ?>
    chaque fois qu'une personne s'inscrit a un évenement, ca rempli la table inscriptevent avec l'id de l'evenement et le nombre de personnes que la personne a inscrite avec elle.

    Le but du jeu est de ressortir tout les evenement avec a coté le nombre total de personnes inscrites a chaque evenement..

    mais la ..

  14. #34
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    Ah, d'accord... je comprends mieux maintenant pourquoi tu faisais la somme et non le compte. Tu avais donc raison sur ce point... il fallait utiliser SUM .

    et donc, pour aller chercher le titre, tu ajoutes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUM(nombre) as masomme, tablecompte.titre as titre FROM......
    Et en bout de ligne, $donnees['titre'] devrait arrêter de te faire une erreur.

    Modifie également la clause ORDER BY pour mettre SUM(nombre) à la place et on devrait être pas mal en business.

  15. #35
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 265
    Par défaut
    donc la ca semble plutot pas tout mal, mais encore tout a fait ca..

    en fait j'ai l'impression qu'il ne prends pas tout en compte, se limite a quatre bizarement, et qu'il ne compte pas vraiment..

    Voila le resultat : (le premier chiffre est ce qu'il a calculé) , je ne comprends pas pourquoi il prends partie time2 deux fois et dans la table des inscriptions j'ai huit évenements different..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    2 partie time 2 
    4 essai avec editeur de texte
    7 test ev 2
    8 partie time 2
    la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $sql = "SELECT SUM(nombre) as masomme, tablecompte.titre as titre FROM (
     SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS tablecompte
     INNER JOIN inscriptevent on inscriptevent.id_event = tablecompte.id_event 
    GROUP BY inscriptevent.nombre
    order by SUM(nombre) ASC";
     
    $retour = mysql_query($sql) or die(mysql_error());
     
    while ($donnees = mysql_fetch_array($retour)){
    echo "<hr>";
    echo $donnees['masomme'];
    echo $donnees['titre'];
    }

  16. #36
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    Il faudrait voir si l'état des autres événements est "publique" ou "privé", autrement il va les ignorer. Également, je me suis trompé dans la clause "group by" de la requête

    C'est pas sur le nombre qu'on doit regrouper... mais sur l'ID de l'événement

    Donc "GROUP BY nombre"

    devient

    GROUP BY inscriptevent.id_event

  17. #37
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 265
    Par défaut
    ha ouais,
    bah la, nikel !!

    merci !

Discussions similaires

  1. [MySQL-5.1] Tri sur SUM avec ROLLUP
    Par dchetelat dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/04/2014, 16h13
  2. Tri sur SUM()
    Par DevLqncer dans le forum Requêtes
    Réponses: 8
    Dernier message: 26/09/2013, 12h55
  3. Requête SUM en fonction de tri
    Par Jefty dans le forum Langage SQL
    Réponses: 14
    Dernier message: 30/03/2012, 20h01
  4. [Access] SUM, MAX et Tri selon 3 critères
    Par fikou dans le forum Langage SQL
    Réponses: 11
    Dernier message: 02/05/2006, 16h08
  5. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25

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