猫史档案馆


【每天亿个小技巧】SQL排行榜

用户:小鹿UUyM小鹿UUyM查看:5 回复:9 评论:5 创建时间:2023-01-14T20:54:40


--------------------------------------------------------防窥线-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

最近有人问我))屑小鹿会SQL排行榜吗)))于是今天我发个教程贴))))

async function initTable() {
    return await db.sql`
        CREATE TABLE IF NOT EXISTS "fen" (
            "win" INT NOT NULL,
            "userKey" CHAR(16) PRIMARY KEY UNIQUE NOT NULL 
        )
    `;
}

async function saveUser(entity) {
    await db.sql`
        INSERT INTO "fen" (
            "win",
            "userKey"
        ) VALUES (
            ${entity.win}, 
            ${entity.player.userKey}
        )
        ON CONFLICT("userKey")
        DO UPDATE SET
            "win"=excluded."win"
    `
}
async function loadUser(entity) {
    const [data] = await db.sql`SELECT * FROM "fen" WHERE "userKey"=${entity.player.userKey} LIMIT 1`
    if (data) {
        entity.win = data.win
    }
    else {
        saveUser(entity)
    }
}
initTable()
world.onPlayerJoin(async({entity}) => {
    await loadUser(entity);
    entity.player.directMessage('读档成功!'); 
});

world.onPlayerLeave(async({ entity }) => {
   await saveUser(entity) 
})
world.onChat(async({ entity, message }) => {
        if (message === '保存') {
            await saveUser(entity)
            entity.player.directMessage('保存成功!'); 
        }
})

这段代码实现的是玩家离开/说保存就会保存当前分数以及读档功能

world.onChat(({ entity, message }) => {
    if (message === '排行榜') {
        entity.player.directMessage('显示排行榜');
        entity.player.dialog({
            type: Box3DialogType.TEXT,
            title: "赢次数排行榜",
            content: dialogContent(),
        })
    }
})

function dialogContent() {
    const allPlayerEntities = world.querySelectorAll('player');
    const sortedPlayerEntities = allPlayerEntities.sort((a, b) => b.win - a.win);
    let content = "";
    for (const entity of sortedPlayerEntities) {
        content = content + `${entity.player.name}赢了${entity.win}局\n`
    }
    return content
}

这些代码实现的是玩家说排行榜就显示排行榜的代码

完整代码:

async function initTable() {
    return await db.sql`
        CREATE TABLE IF NOT EXISTS "fen" (
            "win" INT NOT NULL,
            "userKey" CHAR(16) PRIMARY KEY UNIQUE NOT NULL 
        )
    `;
}

async function saveUser(entity) {
    await db.sql`
        INSERT INTO "fen" (
            "win",
            "userKey"
        ) VALUES (
            ${entity.win}, 
            ${entity.player.userKey}
        )
        ON CONFLICT("userKey")
        DO UPDATE SET
            "win"=excluded."win"
    `
}
async function loadUser(entity) {
    const [data] = await db.sql`SELECT * FROM "fen" WHERE "userKey"=${entity.player.userKey} LIMIT 1`
    if (data) {
        entity.win = data.win
    }
    else {
        saveUser(entity)
    }
}
initTable()
world.onPlayerJoin(async({entity}) => {
    await loadUser(entity);
    entity.player.directMessage('读档成功!'); 
});

world.onPlayerLeave(async({ entity }) => {
   await saveUser(entity) 
})
world.onChat(async({ entity, message }) => {
        if (message === '保存') {
            await saveUser(entity)
            entity.player.directMessage('保存成功!'); 
        }
})
world.onChat(({ entity, message }) => {
    if (message === '排行榜') {
        entity.player.directMessage('显示排行榜');
        entity.player.dialog({
            type: Box3DialogType.TEXT,
            title: "赢次数排行榜",
            content: dialogContent(),
        })
    }
})

function dialogContent() {
    const allPlayerEntities = world.querySelectorAll('player');
    const sortedPlayerEntities = allPlayerEntities.sort((a, b) => b.win - a.win);
    let content = "";
    for (const entity of sortedPlayerEntities) {
        content = content + `${entity.player.name}赢了${entity.win}局\n`
    }
    return content
}

好了)))这里不过多讲解了))))条件可以自行修改)))))))))))))

*注:代码来自汤圆))))))))))我就是搬运了亿点点)))))))))


回复

上一页1 页 / 共 1下一页
小鹿UUyM小鹿UUyM

顶顶顶

点赞0


评论


小鹿UUyM小鹿UUyM

顶顶顶

点赞0


评论


小鹿UUyM小鹿UUyM

顶顶顶

点赞0


评论


小鹿UUyM小鹿UUyM

顶顶顶

点赞0


评论


_HHHHHHHHHH__HHHHHHHHHH_

6.

点赞0


评论


名探酱名探酱

沙发)其实好像就是API+吉吉教程)

点赞0


评论


_HHHHHHHHHH__HHHHHHHHHH_

冷知识:发完ddd的评论后删评也能达到同样的顶贴效果()()

点赞0


评论


仙之鹤仙之鹤

d'd'd'd

点赞0


评论


汤圆渊源汤圆渊源

6

你 权 没 了

点赞0


评论