猫史档案馆


()求助各位大佬((sql模板如何做排行榜(

用户:yee剑走天下yee剑走天下查看:15 回复:11 评论:15 创建时间:2023-03-19T14:43:43


之前屑剑发了一个屑sql模板(

然后今天尝试做排行榜(

不知道为什么没用(

还望大佬指出错误)

具体错误看getTop100处(

console.clear();
const PlayerData = {
    money: [0, true],
    lv: [1, true],
    item: [[], true],
    test: ['yee', false]
};
(async () => {
    await db.sql`
        CREATE TABLE IF NOT EXISTS YJZTX (
            datas TEXT NOT NULL,
            userKey CHAR(16) PRIMARY KEY UNIQUE NOT NULL
        )
    `
})();
function initPlayer(entity) {
    for (let i in PlayerData) {
        entity[i] = PlayerData[i][0]
    }
};
function getPlayerData(entity) {
    var data = { "name": entity.player.name };
    for (let i in PlayerData) {
        PlayerData[i][1] ? data[i] = entity[i] : null
    };
    return JSON.stringify(data);
};
async function savePlayer(entity) {
    if (!entity.player.userKey) return;
    await db.sql`
        INSERT INTO YJZTX (
            datas, 
            userKey
        ) 
        VALUES (
            ${getPlayerData(entity)}, 
            ${entity.player.userKey}
        )
        ON CONFLICT(userKey)
        DO UPDATE SET
        datas = excluded.datas
    `
};
async function loadPlayer(entity) {
    const [data] = await db.sql`SELECT * FROM YJZTX WHERE userKey = ${entity.player.userKey} LIMIT 1`;
    if (data) {
        var Data = JSON.parse(data.datas);
        for (let i in PlayerData) {
            Data[i] ? entity[i] = Data[i] : entity[i] = PlayerData[i][0]
        };
        console.log(getPlayerData(entity));
    } else {
        initPlayer(entity);
    }
};
async function getTop100(type, typeName) {
    var list = [];
    for await (const row of await db.sql`SELECT * FROM YJZTX`) {
        list.push([row.datas.name, row.datas[type]])
    };
    var sortedPlayers = list.sort((a, b) => a[1] - b[1]);
    for (let i = 0; i <= 100; i++) {
        if (sortedPlayers[i]) {
            sortedPlayers[i] = [`第${i}名 | ${sortedPlayers[0]} | ${sortedPlayers[1]}${typeName}${type}`]
        }
    }
    return sortedPlayers
}
async function deletePlayer(entity) {
    await db.sql`DELETE FROM YJZTX WHERE "userKey" = ${entity.player.userKey}`;
};
world.onPlayerJoin(async ({ entity }) => {
    await loadPlayer(entity);
    await getTop100('money', '枚')
});
world.onPlayerLeave(async ({ entity }) => {
    await savePlayer(entity)
})

 


回复

上一页1 页 / 共 1下一页
yee剑走天下yee剑走天下

啊啊啊求各位大佬帮忙啊(悲

点赞0


评论


yee089yee089

报错截图不发就让我修?能修么,没这个能力知道吧

点赞0


评论


Aaa求佛yaAaa求佛ya

 ()

点赞0


评论


蓝矮爱乐蓝矮爱乐

const r = await db.sql`SELECT * FROM 表格名 ORBER BY 数据名 ASC LIMIT 100`;
//这段代码的作用是在“表格名”里面以“数据名”排序的方法读取数据,ASC和DESC的作用就是排名是由高到低还是由低到高
//然后,用for循环整理数据并以dialog的形式输出,就ok了

点赞0


评论


NysidlaNysidla

重写就好啦~()()

点赞0


评论


微风御火微风御火

有没有一种可能,先写排行榜再在此基础上写sql会更好(?)

或者你可以去问小宏()反正我不会sql)))也不会排行榜)))

点赞1


评论


微风御火微风御火

而且可以去q群里问,去秘密基地或者互助群问都可以的)))

点赞1


评论


蓝矮爱乐蓝矮爱乐

    for await (const row of await db.sql`SELECT * FROM YJZTX`) {//这里似乎只用写1个await就行了

点赞0


评论


ComsComs

收藏一下()

点赞0


评论


XiaoLiQAQXiaoLiQAQ

还要改嘛

点赞0


评论


XiaoLiQAQXiaoLiQAQ

console.clear();
const PlayerData = {
    money: [0, true],
    lv: [1, true],
    item: [[], true],
    test: ['yee', false]
};
(async () => {
    await db.sql`
        CREATE TABLE IF NOT EXISTS YJZTX (
            datas TEXT NOT NULL,
            userKey CHAR(16) PRIMARY KEY UNIQUE NOT NULL
        )
    `
})();
function initPlayer(entity) {
    for (let i in PlayerData) {
        entity[i] = PlayerData[i][0]
    }
};
function getPlayerData(entity) {
    var data = { "name": entity.player.name };
    for (let i in PlayerData) {
        PlayerData[i][1] ? data[i] = entity[i] : null
    };
    return JSON.stringify(data);
};
async function savePlayer(entity) {
    if (!entity.player.userKey) return;
    await db.sql`
        INSERT INTO YJZTX (
            datas, 
            userKey
        ) 
        VALUES (
            ${getPlayerData(entity)}, 
            ${entity.player.userKey}
        )
        ON CONFLICT(userKey)
        DO UPDATE SET
        datas = excluded.datas
    `
};
async function loadPlayer(entity) {
    const [data] = await db.sql`SELECT * FROM YJZTX WHERE userKey = ${entity.player.userKey} LIMIT 1`;
    if (data) {
        var Data = JSON.parse(data.datas);
        for (let i in PlayerData) {
            Data[i] ? entity[i] = Data[i] : entity[i] = PlayerData[i][0]
        };

    } else {
        initPlayer(entity);
    }
};
async function getTop100(type, typeName) {
    var list = [];
    for await (const row of await db.sql`SELECT * FROM YJZTX`) {
        list.push([JSON.parse(row.datas).name, JSON.parse(row.datas)[type]])
    };
    var sortedPlayers = list.sort((a, b) => b[1] - a[1]);
    for (let i = 0; i <= 100; i++) {
        if (sortedPlayers[i]) {
            sortedPlayers[i] = [`第${i+1}名 | ${sortedPlayers[i][0]} | ${sortedPlayers[i][1]}${typeName}${type}`]
        }
    }
    return sortedPlayers
}
async function deletePlayer(entity) {
    await db.sql`DELETE FROM YJZTX WHERE "userKey" = ${entity.player.userKey}`;
};

world.onPlayerJoin(async ({ entity }) => {
    await loadPlayer(entity);
    await savePlayer(entity)
    await getTop100('money', '枚')
});
world.onPlayerLeave(async ({ entity }) => {
    await savePlayer(entity)
})

点赞0


评论