1

我正在尝试创建函数,该函数将为我的脚本返回当前用户的最低可用 id。例如,假设有一个 id 为 25 的用户,那么他将能够输入 10 个地址,编号从 250 到 259。所以我创建了这个函数:

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,但我认为这个查询真的无效。所以我的问题是:是否有一些对 db 的查询将返回两个值之间的第一个可用 id?

4

1 回答 1

1

讨厌这么说,但你的问题绝对没有意义。

我会指出,如果您正在寻找可能的最低用户 ID,则使用 SELECT MAX(user_id) 与您想要的相反......

如果你想要一个范围,使用 SELECT MIN(user_id) as min, MAX(user_id) as max ...。

'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 回答