D'accord, je vais y faire face: je suis un meilleur codeur que je ne le suis dans les bases de données, et je me demande où se trouvent les réflexions sur les "meilleures pratiques" sur le sujet de faire des calculs "simples" dans la requête SQL par rapport à le code, comme cet exemple MySQL (je ne l'ai pas écrit, je dois juste le maintenir!) - Cela retourne le nom d'utilisateur et l'âge des utilisateurs au dernier événement.
SELECT u.username as user,
IF ((DAY(max(e.date)) - DAY(u.DOB)) < 0 ,
TRUNCATE(((((YEAR(max(e.date))*12)+MONTH(max(e.date)))
-((YEAR(u.DOB)*12)+MONTH(u.DOB)))-1)/12, 0),
TRUNCATE((((YEAR(max(e.date))*12)+MONTH(max(e.date))) -
((YEAR(u.DOB)*12)+MONTH(u.DOB)))/12, 0)) AS age
FROM users as u
JOIN events as e ON u.id = e.uid
...
Par rapport à faire le levage "lourd" dans le code:
Requete:
SELECT u.username, u.DOB as dob, e.event_date as edate
FROM users as u
JOIN events as e ON u.id = e.uid
code:
function ageAsOfDate($birth, $aod)
{ //expects dates in mysql Y-m-d format...
list($by,$bm,$bd) = explode('-',$birth);
list($ay,$am,$ad) = explode('-',$aod);
//Insert Calculations here
...
return $Dy; //Difference in years
}
echo "Hey! ". $row['user'] ." was ". ageAsOfDate($row['dob'], $row['edate']) . " when we last saw him.";
Je suis assez sûr que dans un cas simple comme celui-ci, cela ne ferait pas beaucoup de différence (à part le sentiment d'horreur rampant quand je dois apporter des modifications à des requêtes comme la première), mais je pense que cela rend plus clair ce que je '' cherche m.
Merci!