Проблема сортировки с SQLite 3 на Discord.py - PullRequest
1 голос
/ 06 августа 2020

Итак, я попытался создать систему выравнивания, она работает, но таблица лидеров не работает должным образом. Она случайным образом сортирует содержимое SQLite, хотя я уже поставил ORDER BY lvl also Я пробовал с ORDER BY txp (txp было общим xp), Это код, который я пишу

    @commands.command()
    async def top10(self, ctx):
        db = sqlite3.connect('main.db')
        cursor = db.cursor()
        cursor.execute(f"SELECT user_id, lvl, txp from levels WHERE guild_id = {ctx.guild.id} ORDER BY txp DESC LIMIT 5 ")
        result = cursor.fetchall()
        embed = discord.Embed(title="Leaderboards", colour=discord.Colour(0x6790a7))
        for i, x in enumerate(result, 1):
            embed.add_field(name=f"#{i}", value=f"<@{str(x[0])}> on Level {str(x[1])} with {str(x[2])} Total XP", inline=False)
        await ctx.send(embed=embed)
        print(result)
        cursor.close()
        db.close()

Это результат

[('560578285747306538', '5', '830'), ('441240050861211648', '8', '548'), ('321191503487827970', '4', '548'), ('457159518254792714', '0', '4'), ('448779471810461706', '1', '36')]``` when I print the db

И это таблица лидеров выглядит как Таблица лидеров выглядит как

1 Ответ

2 голосов
/ 06 августа 2020

Я предполагаю, что тип данных txp равен TEXT, поэтому результат отсортирован по алфавиту. Вы должны преобразовать его в целое число:

cursor.execute(f"SELECT user_id, lvl, txp from levels WHERE guild_id = {ctx.guild.id} ORDER BY txp + 0 DESC LIMIT 5")

txp + 0 неявно преобразует txp в целое число.

...