Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tri pour une requête dans un while

Sujet résolu
    23 septembre 2018 à 13:36:17

    Bonjour,

    J'ai une table de personnes qui contient des éléments tel que la date de naissance (date). A partir de cette table, je souhaiterais afficher une liste de tous les âges de ces personnes, avec pour chaque âge le nombre de personnes qui ont cet âge (puis trier selon cette seconde information).

    Pour effectuer cela, j'utilise la double requête ci-dessous. ça fonctionne mais impossible de modifier l'ordre d'affichage qui ne s'applique que sur ma première requête.

    $sql = 'SELECT DISTINCT FLOOR((TO_DAYS(NOW()) - TO_DAYS(date)+1)/365.25) AS age FROM membres';
    $res = mysqli_query($connexion, $sql);
    $nb = mysqli_num_rows($res);
    while ($data = mysqli_fetch_assoc($res)) 
    {
    	$sql2 = 'SELECT *, FLOOR((TO_DAYS(NOW()) - TO_DAYS(date)+1)/365.25) AS age FROM membres HAVING age = ' . $data['age'];
    	$res2 = mysqli_query($connexion, $sql2);
    	$nb_data_par_cat[] = mysqli_num_rows($res2);
    	$age_data[] = $data['age'];
    }



    Comment faire le tri descendant par nombre de personnes qui ont le même âge ?
    Je n'utilise sans doute pas la bonne manière d'interroger ma table.

    Merci de votre aide !

    • Partager sur Facebook
    • Partager sur Twitter
      24 septembre 2018 à 9:18:22

      Bonjour,

      Je ne comprends pas ce que tu essayes d'afficher ...

      Tu veux un tableau du genre :

      AgeNombre de membres
      35 50
      30 40
      25 30
      20 20
      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        24 septembre 2018 à 10:11:44

        Bonjour,

        Oui c'est exactement ça.

        • Partager sur Facebook
        • Partager sur Twitter
          24 septembre 2018 à 16:03:07

          Alors une seule requête suffit ...

          SELECT
          	FLOOR((TO_DAYS(NOW()) - TO_DAYS(date)+1)/365.25) AS age,
          	COUNT(*) AS nb_membres
          FROM membres
          GROUP BY FLOOR((TO_DAYS(NOW()) - TO_DAYS(date)+1)/365.25)
          ORDER BY nb_membres DESC;

          -
          Edité par Benzouye 24 septembre 2018 à 17:16:33

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            24 septembre 2018 à 17:10:59

            Merci beaucoup pour cette requête unique. Je fais le tri sur nb_membres et ça fonctionne.

            • Partager sur Facebook
            • Partager sur Twitter
              24 septembre 2018 à 17:16:21

              AGold a écrit:

              Je fais le tri sur nb_membres et ça fonctionne.

              Oui pfff my mistake :p

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

              Tri pour une requête dans un while

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown