Page 1 sur 1

requête sql et code php recherche membre par rapport a leur

Posté : 02 janv. 2008, 20:31
par micka30
Bonjour,
je cherche une requête depuis 3 jours , je ne sais pas comment faire!

j'explique:

dans ma bdd ,j'ai les dates de naissances de mes membre sous forme aaaa-mm-jj.
j'ai une page,qui permet aux membres de mon site ,de rechercher d'autre membre de mon site avec comme critére L'age , le departemement , et le sexe!

ma requéte serait simple si ma recherche s'effecturé par date de naissances or elle s'effectue par age!

ex:( selectionne les membre qui on entre X age et Y age du departememt W)

le probleme c'est que je n'arrive pas a convertire les date de naissances qui sont dans ma bdd en age, tout en fessant ma requête qui afficherai les membre qui sont dans ma bdd qui on entre X age et Y age dans le departement W


bon je vous montre 1 script que j'ai fait mais il ya des erreur et je pensse aussi qu'il ne faut pas faire comme ca!

si quelqu'un pourrait me montrer ca serait vraiment gentil!




Warning: mysql_close(): no MySQL-Link resource supplied in C:\wamp\www\tests\premierpage.php on line 434


<?php 
if (isset ($_POST['re_sexe']) && isset ($_POST['age_minimum']) && isset ($_POST['age_maximum'])&& isset ($_POST['departement'])) 
// Si les variables existent 
{ 
// D'abord, on se connecte à MySQL 
mysql_connect("localhost", "root", ""); 
mysql_select_db("sitemicka"); 

$sexe = $_POST['re_sexe']; 
$age_mini = $_POST['age_minimum']; 
$age_maxi = $_POST['age_maximum']; 
$dep = $_POST['departement']; 



$reponse2 = mysql_query("SELECT id, photo2, date_de_naissance, departemement, sexe FROM infoclients"); 




while ($donnees2 = mysql_fetch_array($reponse2) ) 
{ 

$date_naissance = $donnees2['date_de_naissance']; 

$date_naissance1 = mktime(0,0,0,$date_naissance); 
// on prend le timestamp 
$timestamp = time(); 
//on calcule 
$age = floor(($timestamp-$date_naissance1)/3600/24/365.5); 

if ($age <= $age_maxi AND $age>= $age_mini AND $dep == $donnees2['departement'] AND $sexe == $donnees2['sexe']) 

{ 


echo '<tr><td><a href=fichemembre.php?id='.$donnees1['id'].'><img src="images/'.$donnees1['photo2'].'" alt="image" /></a></td></tr>'; 
} 
} 
} 
mysql_close(); // Déconnexion de MySQL 
?>

Posté : 02 janv. 2008, 21:36
par sadeq
D'abord, pour éviter l'erreur sur la fonction mysql_close() il faut la mettre juste avant le dernier } c'est à dire à l'interieur du premier if.

Concernant le problème de l'âge, il faut savoir que mysql peut faire des opérations sur les dates dans la requête SELECT. Comme ça on évite de faire des calculs supplémentaires par PHP comme tu fais dans ton code actuel.

Maintrenant je vais te présenter les opérations mysql que tu peux faire pour résoudre ton problème:

A. Calcul de l'âge:
1. La fonction mathématique de calcul de l'âge d'un membre est :
  • âge en années = (date aujourd'hui - date de naissance) en années
2. Sous mysql, on peut calculer la différence en jours, puis la convertir en années.
  • a. la date d'aujourd'hui : Now()
    b. le nombre de jours dans une date : To_days(la date)
    c. la différence en jours : To_days(Now()) - To_days(date_de_naissance) ou DateDiff(Now() , `date_naissance`)
    d. la conversion d'un nombre de jours en années, se fait en 2 temps:
    • . d'abord convertir le nombre de jours en date valide : From_Days(nombre de jours)
      . extraire l'année à partir de la date obtenue : Year(la date)
Ce qui donne la fonction générale mysql suivante qui calcule l'âge en années:
Year(FROM_DAYS(To_days(now()) - To_days(date_de_naissance)))
ou préférablement:
Year(FROM_DAYS(DateDiff(Now() , `date_naissance`)))
Ce qui est trés lisible : l'âge est le nombre d'années à partir de la différence en jours entre aujourd'hui et la date de naissance.

B. Test de l'âge dans une fourchette d'âges
La fonction mysql qu'on peut utiliser est : âge Between nombre_min And nombre_max
La condition à utiliser dans notre requête est donc:

Code : Tout sélectionner

Year(FROM_DAYS(To_days(now()) - To_days(date_de_naissance))) Between $age_mini And $age_maxi
C. La requête générale:

Code : Tout sélectionner

SELECT id, photo2, date_de_naissance, departemement, sexe FROM infoclients WHERE Year(FROM_DAYS(DateDiff(Now() , `date_naissance`))) Between $age_mini And $age_maxi AND departement = '$dep' AND sexe = '$sexe'

Posté : 03 janv. 2008, 00:56
par Truc
Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "SQL & Bases de données".

Posté : 03 janv. 2008, 01:10
par Truc
Modération :
micka30, le multipostage est interdit sur le forum.
C'est ton 3ème sujet pour le même problème.
Des réponses ont été apporté dans les autres posts si tu as des soucis avec les réponses données reste sur le sujet en question.
Je vérouille celui-ci en espérant que tu n'ouvres plus de nouveau message pour cette même question.
Le bannissement est proche

Merci de prendre le temps de lire les règlements.