Problème recherche sur Age

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème recherche sur Age

par Ryle » 08 mai 2009, 10:03

Le plus performant est naturellement de tout restocker dans un champ date et d'utiliser les fonctions de comparaison qui vont bien :).

Toute autre solution sql va impliquer un calcul pour chaque enregistrement et sera naturellement plus lourd... Je te recommande par exemple d'éviter le NOW() et de spécifier la valeur de la date en php (donc en dur dans la requête) pour éviter qu'il ne le recalcul à chaque fois.

Pour limiter les opérations faites par Mysql, je pense que tu dois pouvoir faire une comparaison du genre :
$sql = 'SELECT ...
	WHERE
	  CONCAT(AnneeNaissance,MoisNaissance,JourNaissance) >= '.$dateInf.'
	AND
	  CONCAT(AnneeNaissance,MoisNaissance,JourNaissance) <= '.$dateSup.'
	...';

//Avec 

$dateInf = (date('Y') - 45) . date('md');
$dateSup = (date('Y') - 25) . date('md');
Au final, on ne compare que des chaines et on est pas obligés de tester si la date existe, ça fait toujours ça de moins ;)

par Elie » 08 mai 2009, 00:28

Je proposerai ca (Sans l'avoir testé) :
SELECT IdProfil FROM tab_profils WHERE TIMESTAMPDIFF(YEAR,'".date('Y-m-d')."', CONCAT(AnneeNaissance,'-',MoisNaissance,'-',JourNaissance)) > 25 AND TIMESTAMPDIFF(YEAR,'".date('Y-m-d')."',CONCAT(AnneeNaissance,'-',MoisNaissance,'-',JourNaissance)) < 40

par Cobaye » 07 mai 2009, 17:51

Mysql

Pour le moment ma requete donne ca :

Code : Tout sélectionner

SELECT IdProfil FROM tab_profils WHERE (DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(CONCAT(AnneeNaissance,'-',MoisNaissance,'-',JourNaissance))), '%Y')+0)>25 AND (DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(CONCAT(AnneeNaissance,'-',MoisNaissance,'-',JourNaissance))), '%Y')+0)<40

par mere-teresa » 07 mai 2009, 17:49

Quel moteur de base de données utilises-tu ?

Problème recherche sur Age

par Cobaye » 07 mai 2009, 17:24

Hello, aller je pause une question

J'ai une table ou je stocke une date de Naissance en trois champs : JourNaissance, MoisNaissance, AnneeNaissance

Mais dans mon formulaire de recherche, je choisie un age ! entre 25 et 45 ans par exemple !

Quelle méthode vous utiliseriez pour faire la recherche ? en sachant qu'un membre qui a eu 25 hier doit ressortir !

J'ai des solutions mais je les trouvent lourdes donc j'aimerai vos avis !

Merci