1

スクリプトで現在のユーザーの利用可能な最小 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へのクエリはありますか?

4

1 に答える 1

1

これを言うのは嫌いですが、あなたの質問はまったく意味がありません。

可能な限り LOWEST の user_id を探している場合、SELECT MAX(user_id) を使用すると、必要なものとは逆になることを指摘します...

範囲が必要な場合は、SELECT MIN(user_id) を最小値として、MAX(user_id) を最大値として使用します ....

'SELECT MIN(user_id) as min, MAX(user_id) as max FROM user_address WHERE user_id BETWEEN :min AND :max'

結果が得られた場合、使用可能な ID の範囲を決定するために使用できる「最小」値と「最大」値が得られますか?

于 2013-09-06T18:03:41.803 に答える