2013-02-20 85 views
1

如何选择从现有字段计算出的自定义值?NOTORM自定义mysql函数

例如,我存储了出生日期,并且我想选择从mySql函数计算出来的年龄。

$app->get("https://stackoverflow.com/users/:id", function ($id) use ($app, $db) { 
$user = $db->users()->where("users_id", $id); 
if ($data = $user->fetch()) { 
    $hobbies = array(); 
    foreach ($data->users_hobbies() as $hobbie) { // get all tags of $application 
     $hobbies[] = $hobbie["users_hobbies_name"]; // print the tag name 
    } 
    echo json_encode(array(
     "id" => $data["users_id"], 
     "login" => $data["users_login"], 
     "mail" => $data["users_mail"], 
     "date_of_birth" => $data["users_date_of_birth"], 
     "age" => ?? 
     "hobbies" => $hobbies 
     )); 
} else { 
    echo json_encode(array(
     "status" => false, 
     "message" => "User ID $id does not exist" 
     )); 
} 
}); 
+0

你想在哪里计算该值?在数据库中还是在你的PHP代码中? – Odi 2013-02-25 23:33:44

+0

在数据库中 – Klaitos 2013-02-27 08:59:19

回答

1

最简单的方法是define a MySQL view你需要的所有数据(包括计算age列):

CREATE VIEW user_data AS 
SELECT users_id, 
     users_login, 
     users_mail, 
     users_date_of_birth, 
     DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(users_date_of_birth, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(users_date_of_birth, '00-%m-%d')) AS age 
FROM users; 

然后,你可以简单地询问了这一观点。

$app->get("https://stackoverflow.com/users/:id", function ($id) use ($app, $db) { 
$user = $db->user_data()->where("users_id", $id); 
if ($data = $user->fetch()) { 
    $hobbies = array(); 
    foreach ($data->users_hobbies() as $hobbie) { // get all tags of $application 
     $hobbies[] = $hobbie["users_hobbies_name"]; // print the tag name 
    } 
    echo json_encode(array(
     "id" => $data["users_id"], 
     "login" => $data["users_login"], 
     "mail" => $data["users_mail"], 
     "date_of_birth" => $data["users_date_of_birth"], 
     "age" => $data["age"] 
     "hobbies" => $hobbies 
     )); 
} else { 
    echo json_encode(array(
     "status" => false, 
     "message" => "User ID $id does not exist" 
     )); 
} 
});