私は既存の一意のキーのリストを管理する非常に基本的なAPIを書いています。 getKey()
メソッドが呼び出されると、すでに割り当てられているキーが返されるか、未使用のキーが見つかって割り当てられます。更新クエリの後に行データを取得
後者では、既存の行にUPDATEを呼び出し、割り当て済みとマークする必要があります。その後、私はこれがかなり冗長であると感じる行データを取得するために同じ情報を再度照会しています。それは機能しますが、私は自己改善のためのベストプラクティスを見つけようとしています。ここでは、潜在的により良い実装についてフィードバックを得たいと考えています。
<?php
require "Slim/Slim.php";
\Slim\Slim::registerAutoloader();
require "defines.php";
$GLOBALS['db'] = new mysqli(DATABASE_HOST, DATABASE_USER, DATABASE_PASS, DATABASE_NAME);
// SLIM INSTANCE
$app = new \Slim\Slim();
$app->get('/getKey/:dlc/:serviceId', function ($dlc, $serviceId)
{
$sql = "SELECT game_key FROM " . $dlc . " WHERE service_id = " . $serviceId . " LIMIT 1";
if ($result = $GLOBALS['db']->query($sql))
{
// Check if we already have a GAME_KEY assigned
if (mysqli_num_rows($result) >= 1)
{
echo "got an existing row!";
$row = mysqli_fetch_assoc($result);
echo $row["game_key"];
}
else
{
echo "no existing row, lets update one!";
$sql = "UPDATE " . $dlc . " SET service_id = $serviceId WHERE service_id = 0 LIMIT 1";
if ($GLOBALS['db']->query($sql))
{
$sql = "SELECT game_key FROM " . $dlc . " WHERE service_id = " . $serviceId;
if ($result2 = $GLOBALS['db']->query($sql))
{
$row = mysqli_fetch_assoc($result2);
echo $row["game_key"];
}
}
}
}
else
{
echo "Query Failed!";
}
});
// run the Slim app
$app->run();
?>
に「ID」の主キー列を持っていることを前提とし** service_id ** game_keyが存在し、その後where句WHERE service_id = 0で更新を行い、game_keyを設定していません。 2番目のクエリのgame_keyは最初のクエリと同じになります。この第二の部分は厄介なように見えます。このコードで何をしたいですか? –
これは、game_keyフィールドが既にデータベースに設定されているためです。一意のgame_keyを含む1500行があります。私はservice_idを使用して、割り当てられているかどうかを判断しています。そうでない場合は0、それ以外の場合はサービスのIDです。希望は意味をなさない! –