スクリプトで現在のユーザーの利用可能な最小 ID を返す関数を作成しようとしています。たとえば、ID 25 のユーザーがいるとします。このユーザーは、250 から 259 までの番号が付けられた 10 個のアドレスを入力できます。したがって、この関数を作成しました。
protected function checkAvailIDforAddress($id)
{
$min = $id*10;
$max = $id*10 + 9;
$checkAvailID = $this->_dbconnection->prepare
('SELECT MAX(user_id) FROM user_address WHERE user_id BETWEEN :min AND :max');
$checkAvailID->bindParam(':min', $min);
$checkAvailID->bindParam(':max', $max);
$checkAvailID->execute();
$row = $checkAvailID->fetch();
if ($row[0] == 0) throw new Exception('Error');
$AvailID = $row[0] + 1;
return $AvailID;
}
この関数は良いと思いましたが、テストしたところ、ユーザーが db 3addresses に入れてから 2nd を削除しても、関数はまだ max を返すことがわかりました。値なので、4 番目と 2 番目が設定解除されるとエントリが追加されます。
次に、foreachループで質問を変更し、ループごとにdbにクエリを作成して、特定のIDが設定されていないかどうかを確認しましたが、このクエリは本当に効果がないと思います。私の質問は次のとおりです。2つの値の間で最初に利用可能なIDを返すdbへのクエリはありますか?