8768 sujets

Développement web côté serveur, CMS

Bonjour à tous,

J'ai besoin d'aide concernant une requête MySQL sur une table de personnes. Dans cette table, il y a quelques informations concernant les personnes et la date de naissance avec laquelle je calcule l'âge.

Mon objectif est d'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). ça donnerait :

Age	   Nombre de membres
35            	50
44	                40
25	                20
28	                10



Pour effectuer cela, j'utilise la double requête ci-dessous qui affiche bien les éléments souhaités mais avec un classement par âge.

$sql = 'SELECT DISTINCT FLOOR((TO_DAYS(NOW()) - TO_DAYS(date)+1)/365.25) AS age FROM membres ORDER BY age';
$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'];
}


ça affiche ceci :

Age	   Nombre de membres
15	                7
16	                5
17	                4
18	               22



Comment afficher ce même tableau trié par nombre de membres ?

Merci de votre aide.
Modifié par Agold (24 Sep 2018 - 13:36)
Bonjour,
Tu peux obtenir ce tableau avec une seule requête:
SELECT FLOOR((TO_DAYS(NOW()) - TO_DAYS(date)+1)/365.25) AS age, count(*) as nbmembres FROM membres 
GROUP BY age
ORDER BY nbmembres desc
Je viens de tester, c'est ça.
Je suis impressionné par l'optimisation de la requête. Smiley biggrin

Merci beaucoup.