1

既存のフィールドから計算されたカスタム値を選択するにはどうすればよいですか?

たとえば、生年月日を保存していて、mySql 関数から計算された年齢を選択したいと考えています。

$app->get("/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"
        ));
}
});
4

1 に答える 1

1

最も簡単な方法は、必要なすべてのデータ (計算列を含む)を含むMySQL ビューを定義することです。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("/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"
        ));
}
});
于 2013-02-27T09:31:15.503 に答える