โอเคฉันจะจัดการกับมัน: ฉันเป็นผู้เขียนโค้ดที่ดีกว่าฉันที่ฐานข้อมูลและฉันสงสัยว่าความคิดเกี่ยวกับ "วิธีปฏิบัติที่ดีที่สุด" อยู่ที่เรื่องของการคำนวณแบบ "ง่าย" ในแบบสอบถาม SQL เทียบกับ รหัสเช่นตัวอย่าง MySQL นี้ (ฉันไม่ได้เขียนฉันแค่ต้องรักษามัน!) - นี่จะส่งคืนชื่อผู้ใช้และอายุของผู้ใช้ในเหตุการณ์ครั้งสุดท้าย
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
...
เปรียบเทียบกับการยกรหัส "หนัก":
ค้นหา:
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
รหัส:
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.";
ฉันค่อนข้างมั่นใจในกรณีง่าย ๆ เช่นนี้มันจะไม่สร้างความแตกต่างมากนัก (นอกเหนือจากความรู้สึกสยองขวัญที่คืบคลานไปเมื่อฉันต้องทำการเปลี่ยนแปลงคำค้นหาอย่างแรก) แต่ฉันคิดว่ามันทำให้ชัดเจนว่าฉันเป็นอย่างไร กำลังมองหา
ขอบคุณ!