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. #1
    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 calul SUM et tri
    Bonjour

    je fais une requete sur une table pour calculer le nombre de personnes inscrite a un événement, ca calcule très bien, mais ensuite je ne vois pas comment faire pour trier les résultat du plus grand au plus petit par exemple au niveau du résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $sql = "SELECT SUM(nombre) as masomme FROM inscriptevent WHERE id_event = '$id_event'  ";
    $somme = mysql_query($sql,$cnx) or die ('Erreur : '.mysql_error() ); 
    $detail = mysql_fetch_array($somme);
    j'ai tenté de faire un order by masomme mais ca ne fonctionne pas

    quelqu'un aurait il une idée s'il vous plait ?

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = "SELECT SUM(nombre) as masomme FROM inscriptevent WHERE id_event = '.$id_event' GROUP BY nombre ORDER BY masomme ASC";
    Le group by ne prends pas les valeurs calculées, mais le order by oui donc je pense que comme ca devrait fonctionner.

  3. #3
    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
    ca retourne bien un resultat, mais pas le bon, le calcul deviens faux..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT SUM(nombre) as masomme FROM inscriptevent WHERE id_event = '$id_event' GROUP BY nombre ORDER BY masomme ASC";

  4. #4
    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
    Hum, bizarre car je viens de le faire sur une de mes bases, et elle fonctionne, je te files un lien qui pourra peut être t'aider :
    http://stackoverflow.com/questions/1...a-sum-in-mysql

  5. #5
    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
    est-ce que ca peux venir du fait que ce soit dans une boucle ?

    je met toute la page pour avoir une vue d'ensemble :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?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 SUM(nombre) as masomme FROM inscriptevent WHERE id_event = '$id_event' GROUP BY nombre ORDER BY masomme ASC";
    $somme = mysql_query($sql,$cnx) or die ('Erreur : '.mysql_error() ); 
    $detail = mysql_fetch_array($somme); 
    echo '<hr>';
    echo $detail['masomme'];
    echo $donnees['titre'];
    }
    ?>

  6. #6
    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
    Explique nous, ce que fais ton code et plus précisément ta requête

  7. #7
    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
    la premiere va selectionner tous les evenement de type publique ou privé, la seconde sert a calculer pour chaque evenement le nombre d'inscrit..

  8. #8
    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
    Et tu ne peux pas faire qu'une seule requête ?
    As-tu un lien entre la table event et inscripevent ?

  9. #9
    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 l'id_event est le meme

  10. #10
    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
    Je pense que tu devrais faire sa en une seule requête, qui te permettra de calculer le nombre d'inscrit pour chaque évènement public ou privé.

  11. #11
    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 oui mais la...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    SELECT DISTINCT t1.id_event, t1.username, t1.titre, t1.date, t2.usernamejoueurs, t2.joueurs, t2.roomies, t2.username
    FROM event AS t1, inscriptevent AS t2 
    ORDER BY rand() LIMIT 5
    GROUP BY nombre ORDER BY masomme ASC
    un truc du genre ?

    mais le SUM je le colle comment la dedans ?

  12. #12
    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 ton select.
    Tu compte le nombre d'inscrit pour tous les évènements qu'il soit privé ou public.
    Donc il te manque une condition (public ou privé)
    Ensuite il te manque ta jointure entre les deux tables.
    Et à mon avis dans ton select il ne doit pas connaitre ton "t1" et ton "t2" étant donné que tu le met dans ton from

  13. #13
    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 j'ai essayer dans tous les sens toute la matinée..

    rien a faire .....

    dès que je veux coller SUM dedans ca foire..

  14. #14
    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
    Montre ta requête

  15. #15
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    Si je reprends ta requête originale:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = "SELECT SUM(nombre) as masomme FROM inscriptevent WHERE id_event = '$id_event'  ";
    Si tu fais "order by masomme", de mon expérience ça ne passera effectivement pas... puisque tu utilises l'alias de la colonne. Donc, si tu veux faire un order by de la somme, tu dois faire comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = "SELECT SUM(nombre) as masomme FROM inscriptevent WHERE id_event = '$id_event' ORDER BY SUM(nombre) DESC";
    Edit:

    Si tu veux imbriquer tes deux requêtes, tu peux essayer un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    SELECT COUNT(nombre) as masomme FROM inscriptevent 
     
    INNER JOIN (
     
    SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS tblCeQueTuVeux on inscriptevent.id_event = tblCeQueTuVeux.id_event
     
    WHERE inscriptevent.id_event = '$id_event' GROUP BY nombre ORDER BY COUNT(nombre) ASC
    Aussi, si tu veux compter le nombre de personnes inscrites... c'est pas la fonction SUM que tu dois utiliser, mais la fonction COUNT (comme j'ai mis dans la requête).

  16. #16
    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
    quand je fais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $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 SUM(nombre) as masomme FROM inscriptevent WHERE id_event = '$id_event' ORDER BY SUM(nombre) DESC";
    $somme = mysql_query($sql,$cnx) or die ('Erreur : '.mysql_error() ); 
    $detail = mysql_fetch_array($somme); 
    echo '<hr>';
    echo $detail['masomme'];
    echo $donnees['titre'];
    }
    tout s'affiche mais toujours pas trié

  17. #17
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    Bon, de nouveau moi... j'ai mieux regardé le problème et je crois que cette solution serait plus appropriée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    SELECT COUNT(nombre) as masomme FROM (
     
    SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS tblCeQueTuVeux on inscriptevent.id_event = tblCeQueTuVeux.id_event) as tblCeQueTuVeux
     
    INNER JOIN inscriptevent on inscriptevent.id_event = tblCeQueTuVeux.id_event
    GROUP BY inscriptevent.nombre
    order by COUNT(nombre) ASC
    Encore ici, j'ai utilisé COUNT au lieu de SUM, car ce que j'ai compris c'est que tu veux compter le nombre de personnes inscrites alors c'est cette fonction qui est la plus appropriée... mais ça dépend toujours ce ce que tu veux faire évidemment.

    En espérant que cette fois-ci sera la bonne, bonne chance

  18. #18
    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
    alors la.. je ne comprends pas la requete


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = "SELECT COUNT(nombre) as masomme FROM (
     
    SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS $id_event on inscriptevent.id_event = $id_event) as $id_event
     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);
    ca me retourne une erreur, je ne comprends pas bien a quoi servent les different as..

  19. #19
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    Essentiellement, on fait un SELECT sur un autre SELECT (d'où le terme de requête imbriquée).

    Le premier SELECT externe, soit SELECT count(nombre) va aller puiser ses données dans le résultat de la requête interne, soit SELECT * FROM event à la place d'une table normale.

    Cependant, comme la requête interne n'a pas de nom officiel, il faut lui donner un alias afin que la requête externe puisse y faire référence, d'où le "AS tblCeQueTuVeux" qui permet ultimement de dire qu'on est en train de faire référence aux champs de la requête interne grâce à la syntaxe tblCeQueTuVeux.champQuelconque

    De plus, sur ta requête, tu as un petit problème avec la requête interne. Cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS $id_event on inscriptevent.id_event = $id_event) as $id_event
    Devrait plutôt être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (SELECT * FROM event WHERE etat = 'publique' OR etat = 'prive') AS tblCeQueTuVeux
    L'alias que tu donnes à ta requête doit être FIXE, STATIQUE, n'utilises pas de nom de variable ici, ça ne fonctionnera pas.

    Bon, je crois que c'est tout. Si tu as d'autres questions, n'hésite pas

  20. #20
    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 on résume :

    j'ajoute un nom de table inexistant pour creer ma requete ce qui donne :

    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'];
    }
    ?>
    aucune erreur retourné, par contre du coup le calcul n'est pas bon, mais la a mon avis c'est juste parce que je ne vois pas comment afficher le COUNT

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