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 :

[SQL] tri d'un resultat avec boucle for


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut [SQL] tri d'un resultat avec boucle for
    Bonjour le forum,

    j'ai une BDD qui contient parmis les champs un nommé "cp" (Code postal)

    Je souhaiterai affiché la somme des lignes dans ma bdd par Code postal et ordonner les résultat en fonction du resultat de la somme.

    Mon début de code est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for ($i=1; $i<=96; $i++)
    {
    $dept =  mysql_query("SELECT COUNT(*) FROM demandes where cp ='$i'");
    $rdept = mysql_fetch_row($dept);
    $tdept = $rdept[0] + 0;
    echo "$i ($tdept)<br>";
    }
    et paradoxalement c'est le tri qui devrait etre le plus facile a coder et pourtant ca ne fonctionne pas avec un order car un order ne me trirait pas en fonction du resultat COUNT mais en fonction de la variable champ.

    Enfin pareil avec la limit d'affichage que je souhaiterai a 50 puis le second tableau a 50, 50, mais comment faire puisque le tri doit se faire en fonction du resultat...

    Merci a tous pour votre patience.

  2. #2
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    tu peux faire ce tri en SQL directement en une seule requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dept =  mysql_query("SELECT cp, COUNT(*) as NbParCp FROM demandes GROUP BY cp ORDER BY cp ASC");
    ensuite tu fais une boucle while pour parcourir la liste des résultats

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    je vais essayer

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    (Je ne comprends pas, ce qu eje cherche c'est ordonner les codes postaux en fonction des sommes des lignes présentant chaque code postal.

    Avec ton select, je n'obtiens pas ce resultat.

    Je recherche a obtenir qq choses comme ça :
    69 (114)
    75 (95)
    13 (94)
    59 (88)
    etc...

    Les resultats entre parentheses sont les COUNT

  5. #5
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Pardonc j'avais mal compris, si tu veux trier en fonction des count essaies ca alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dept =  mysql_query("SELECT cp, COUNT(*) as NbParCp FROM demandes GROUP BY cp ORDER BY NbParCp ASC");
    Si jamais ca ne marche pas, essaies ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dept =  mysql_query("SELECT cp, COUNT(*) as NbParCp FROM demandes GROUP BY cp ORDER BY 2 ASC");
    2 correspond au numéro de la colonne dans le SELECT, parfois ca fait des erreurs si tu utilises le nom d'une colonne nommée par AS ...

    (autre chose, penses a vérifier ce que te retourne mysql_query() en cas d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dept = mysql_query() or die("Erreur SQL : " . mysql_error());

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Ne t'excuses pas c'est déja vachement bioen que tu m'aides, merci.

    Bon apparemment cela ne tri pas correctement, peut etre que cel vient de mon while:

    voici le fichier :
    www.test-internet.com/dept.php

    et le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $dept =  mysql_query("SELECT cp, COUNT(*) as NbParCp FROM demandes GROUP BY cp ORDER BY NbParCp ASC");
     
    while($ligne = mysql_fetch_array($dept))
    {
    $rdept = mysql_fetch_row($dept);
    $tdept = $rdept[0] + 0;
    $cp = $ligne["cp"];
    echo "$cp ($tdept)<br>";
    }
    il faudrait que j'arrive a écrire plutot quelques choses comme ceci :
    echo "$cp (NbParCp)<br>";

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 181
    Points : 189
    Points
    189
    Par défaut
    bonjour,
    je crois que ce code marche,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $dept =  mysql_query("SELECT cp, COUNT(*) as NbParCp FROM demandes GROUP BY cp ORDER BY NbParCp ASC");
     
     
    while($ligne = mysql_fetch_array($dept))
    {
    $cp = $ligne["cp"];
    $nb = $ligne["NbParCp"];
    echo $cp."(".$nb.")<br>";
    }
    teste est dis si c'est bon
    ...

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Je vous remercie tous les deux, cela fonctionne trés bien.

    J'ai juste quelques adaptations a faire.

    Trés bonne journée

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 181
    Points : 189
    Points
    189
    Par défaut
    je dirais que c'est koopajah qui a tout fait


    n'oublie pas
    ...

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

Discussions similaires

  1. script avec boucle for
    Par gloglo dans le forum Langage SQL
    Réponses: 16
    Dernier message: 30/05/2007, 14h30
  2. Problème avec boucle for() et action POST
    Par Oli_Ifre dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2007, 09h52
  3. [ActionScript] Problème avec boucle 'FOR'
    Par BnA dans le forum Flash
    Réponses: 7
    Dernier message: 02/11/2006, 09h26
  4. [SQL Server] parcourir une Table avec un FOR
    Par papouAlain dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/06/2006, 11h49
  5. faire plusieur declaration avec boucle for ?
    Par debutant-1 dans le forum C
    Réponses: 4
    Dernier message: 18/05/2006, 20h19

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