1

我想得到XP点数低于使用命令的成员的用户数,这样我可以得到他的排名。

但是我对 javascript 和 sql 查询知之甚少,而且我很难坚持这一点,它只是返回 [object Object] 而不是数字。

我的sql表

const table = sql.prepare("SELECT count(*) FROM sqlite_master WHERE type='table' AND name = 'scores';").get();
    if (!table['count(*)']) {
        // If the table isn't there, create it and setup the database correctly.
        sql.prepare("CREATE TABLE scores (id TEXT PRIMARY KEY, user TEXT, guild TEXT, points INTEGER, level INTEGER, money INTEGER);").run();
        // Ensure that the "id" row is always unique and indexed.
        sql.prepare("CREATE UNIQUE INDEX idx_scores_id ON scores (id);").run();
        sql.pragma("synchronous = 1");
        sql.pragma("journal_mode = wal");
    }

    // And then we have two prepared statements to get and set the score data.

    client.getScore = sql.prepare("SELECT * FROM scores WHERE user = ? AND guild = ?");
    client.setScore = sql.prepare("INSERT OR REPLACE INTO scores (id, user, guild, points, level, money) VALUES (@id, @user, @guild, @points, @level, @money);");


});

我的尝试

 if (message.content.startsWith(prefix + "cl stats")) {
        const curxp = score.points;
        client.rank = sql.prepare("SELECT count(*) FROM scores WHERE points >= @curxp AND guild = @guild").get();

        console.log(client.rank);
        
        await message.reply(`${client.rank}`);

    }
4

1 回答 1

0

找到了解决办法。可能不是最好的,但它确实有效。

client.getRank = sql.prepare("SELECT count(*) FROM scores WHERE points >= ? AND guild = ?");
function getRank(){
        const curXP = score.points;
        
        let rankOBJ = client.getRank.get(curXP, message.guild.id)
        console.log(rankOBJ);
        let rankStr = JSON.stringify(rankOBJ);
        let rank = rankStr.match(/\d/g);
        return rank;

    };
于 2021-10-06T23:47:50.743 回答