PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 25-09-2011 16:45:38

t14
Membre
Inscription : 10-09-2009
Messages : 96

recherche champ minimum enregistrement mysql

Bonjour,

Dans ma base, un enregistrement comporte le nom, la date de naissance (sous forme jj.mm.aaaa, ou aaaa, ou >aaaa, ou ~aaaa, .......).
   
Je veux afficher les noms commençant par "A". S'il y a plusieurs fois le même nom, je n'en affiche qu'un. Je veux également afficher le nombre de nom identique, et la date de naissance minimum en me basant sur l'année. C'est sur ce dernier critère que je pêche !!!!
   
Comme le fiormat des dates est différent, je pense que le mieux est de se baser sur l'année (aaaa), soit les 4 derniers caractères du champs. Mais ce que j'ai fait me sort la première année lue du premier enregistrement du nom similaire, et non la plus petite année.

$select = 'SELECT nom,COUNT(*) AS nb, MIN(date_naissance), RIGHT(date_naissance, 4) AS min_age FROM ville WHERE nom like "A%" GROUP BY nom ORDER BY nom ASC';
   
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
 
while ($row = mysql_fetch_array($result))
 
{
 
echo '<tr>';
 
echo '<td>'.$row['nom'].'</td>';
 
echo '<td align="center">'.$row['nb'].'</td>';
 
echo '<td>'.$row['min_age'].'</td>';
 
echo '</tr>';
 
}

Merci de m'aider à trouver mon erreur ...........

Dernière modification par t14 (25-09-2011 16:46:18)

Hors ligne

#2 25-09-2011 21:51:41

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : recherche champ minimum enregistrement mysql

Bonsoir,

J'ai bien peur que .... tout soit faux.
Petite question. Ton champ date_naissance est-il de type DATE?

++


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#3 26-09-2011 07:19:16

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : recherche champ minimum enregistrement mysql

Saluton,
Je ne pense pas que la colonne date_naissance soit de type DATE, malheureusement.
Mais ce n'est pas le seul problème.
Cette utilisation de la clause GROUP BY fait fi de la dépendance fonctionnelle qui existe entre les colonnes d'une ligne d'une table. Rien ne permet d'assurer que la ligne correspondant à MIN(date_naissance) sera la même que celle retournée par RIGHT(date_naissance, 4).
Je sais, ça surprend toujours les débutants, mais la clause GROUP BY est à utiliser avec prudence, notamment avec MySQL, qui se montre très laxiste dans son implémentation.
Par ailleurs, comme la colonne date_naissance m'a tout l'air d'être de type CHAR ou VARCHAR MIN(date_naissance) a peu de chance de retourner la plus ancienne.
Autrement dit, Jc a amplement raison, c'est tout faux tout pourrave ce code.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

Pied de page des forums