【问题标题】:Get a random record from table where a field is null从字段为空的表中获取随机记录
【发布时间】:2020-02-24 21:38:00
【问题描述】:

我正在尝试从 ownerID 为null 的数据库表中检索一个随机公寓。此脚本用于 AltV 上的 GTA 5 服务器,问题是 letrandomHouse = Math.floor(Math.random()*res.length); 它不会更新 id 所在的公寓所有者

player.data.ownerID = res[0]["id"];
            con.query('SELECT * FROM apartements WHERE owner = null', function(err, res, row){
                if(res){
                    let randomHouse = Math.floor(Math.random()*res.length);
                    console.log(randomHouse);
                    con.query('UPDATE apartements SET owner = ? WHERE id = ?', [player.data.ownerID, randomHouse], function(res, err, row){
                        if (err){
                            console.log(err);
                            console.log("test");
                        }
                        console.log(res);
                    });
                    console.log(res);
                } else {
                    console.log(err);
                }
});

完整的导出功能

export function registerHouse(player){
    con.query('SELECT `id` FROM characters WHERE accountID = ?', [player.data.accountID], function(err, res, row){
        if(!err){
            player.data.ownerID = res[0]["id"];
            con.query('SELECT * FROM apartements WHERE owner = null', function(err, res, row){
                if(res){
                    let randomHouse = Math.floor(Math.random()*res.length);
                    console.log(randomHouse);
                    con.query('UPDATE apartements SET owner = ? WHERE id = ?', [player.data.ownerID, randomHouse], function(res, err, row){
                        if (err){
                            console.log(err);
                            console.log("test");
                        }
                        console.log(res);
                    });
                    console.log(res);
                } else {
                    console.log(err);
                }
            });
        } else {
            console.log(err);
        }
    });
}

【问题讨论】:

    标签: javascript mysql sql sql-update


    【解决方案1】:

    您的代码有一个问题是SELECT 语句中的WHERE 子句:

    WHERE owner = null
    

    这永远不会匹配。要检查空值,您需要 IS NULL 构造。

    但就问题而言,你可以用一条语句做你想做的事:

    update apartements 
    set owner = ? 
    where owner is null
    order by rand()
    limit 1
    

    【讨论】:

    • 这意味着我不需要先全选,对吗? rand() 限制 1 的顺序会像 20 个公寓之一一样更新?
    • @MisterLA:是的,没错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多