Được rồi, tôi sẽ xử lý nó: Tôi là một lập trình viên giỏi hơn tôi ở cơ sở dữ liệu và tôi tự hỏi những suy nghĩ về "thực tiễn tốt nhất" nằm ở đâu trong chủ đề thực hiện các phép tính "đơn giản" trong truy vấn SQL so với mã, chẳng hạn như ví dụ về MySQL này (Tôi không viết nó, tôi chỉ phải duy trì nó!) - Điều này trả về tên người dùng và tuổi người dùng kể từ sự kiện cuối cùng.
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
...
So với việc nâng "nặng" trong mã:
Truy vấn:
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
mã:
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.";
Tôi khá chắc chắn trong một trường hợp đơn giản như thế này, nó sẽ không tạo ra nhiều khác biệt (ngoài cảm giác rùng rợn khi tôi phải thay đổi các truy vấn như lần đầu tiên), nhưng tôi nghĩ nó làm cho nó rõ ràng hơn những gì tôi ' m đang tìm kiếm.
Cảm ơn!