【问题标题】:Simple While loop database search table简单的 While 循环数据库搜索表
【发布时间】:2015-02-07 14:09:43
【问题描述】:

首先:感谢我通过寻找其他人发布的问题的答案而获得的所有巨大帮助。

我有一个小而简单的问题要问你:

我正在尝试随机生成一个数字,但如果它存在于数据库表中,它应该继续生成一个新数字,直到找到一个唯一的数字。

我们将不胜感激!

    $klantnr = rand(1,9);

    $kn = mysql_num_rows(mysql_query('select username from users where id="'.$klantnr.'"'));

    while($kn!=0){
       $klantnr = rand(1,9);
      }                                   
echo $klantnr;

【问题讨论】:

    标签: loops if-statement random while-loop


    【解决方案1】:

    创建表:

    id integer primary key auto_increment
    insert into users (id, username) values (NULL, 'name')
    insert into users (username) values ('name')
    

    MySQL 会为你生成唯一的 id

    === 更新

    create table random_id (
        id integer,
        used tinyint,
        primary key(id),
        key idx_used(used)
    );
    
    for (0..9999) {
        rand_id = get_random_id();
        insert into random_id (id, used) values (rand_id, 0);
    }
    

    当需要随机 id 时,从 random_id 表中取一个即可:

    rand_id = select id from random_id where used = 0;
    update random_id set used = 1 where id = :rand_id
    
    use rand_id
    

    真的是预先生成的随机id,如果你保证users表的id只来自随机表,你就不需要处理冲突id了:)

    【讨论】:

    • 但这会自动递增,对吗?我希望它有一个介于 1000 和 9999 之间的随机数(我稍后会更改 rand(1,9)。
    • 是的,它会自动递增。如果只在插入时使用随机数,可以while (try insert with random id) { if (mysql says key duplicate) { get a new id } else { break; } }
    • 我不想插入值,而是将其存储在变量中。
    • 对我来说,我将创建一个表来存储随机生成的 id,然后将 id 分配为变量。如果每次都通过随机和选择循环生成id,在更糟糕的情况下可能会选择太多次..
    猜你喜欢
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 2014-03-09
    • 1970-01-01
    • 2015-04-23
    • 2014-02-10
    相关资源
    最近更新 更多