De acuerdo, lo abordaré: soy un mejor codificador que en las bases de datos, y me pregunto dónde están las ideas sobre "mejores prácticas" sobre el tema de hacer cálculos "simples" en la consulta SQL vs. el código, como este ejemplo de MySQL (¡no lo escribí, solo tengo que mantenerlo!) - Esto devuelve el nombre de usuario y la edad de los usuarios desde el último evento.
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
...
En comparación con hacer el levantamiento "pesado" en el código:
Consulta:
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
código:
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.";
Estoy bastante seguro de que en un caso simple como este no habría mucha diferencia (aparte de la sensación de horror cuando tengo que hacer cambios en consultas como la primera), pero creo que aclara lo que yo ' Estoy buscando.
¡Gracias!