Tamam, ben buna polis olacağım: Ben veritabanlarında olduğumdan daha iyi bir kodlayıcıyım ve "en iyi uygulamalar" hakkındaki düşüncelerin SQL sorgusunda "basit" hesaplamalar yapma konusunda nerede olduğunu merak ediyorum. Bu MySQL örneği gibi kod (yazmadım, sadece korumak zorundayım!) - Bu, kullanıcı adını ve kullanıcıların son olaydan itibaren yaşını döndürür.
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
...
Koddaki "ağır" kaldırma işlemiyle karşılaştırıldığında:
Sorgu:
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
kod:
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.";
Böyle basit bir durumda çok fazla fark yaratmayacağından eminim (birincisi gibi sorgularda değişiklik yapmak zorunda olduğumda korkutucu korku hissi dışında), ama bence ne daha net arıyorum.
Teşekkürler!