排序后如何从 sqlite 获取数据

How to get data from sqlite after sorting?

本文关键字:sqlite 获取 数据 排序      更新时间:2023-10-16

我再次需要你的帮助。我想从我的 sqlite 数据库中获取前 3 个值,并将它们存储在 QStrings 或 int 中。我的数据库有 1 个表,该表有 3 个列(名称、胜利、失败)。我想做这样的事情:

QString name1;
QSqlQuery qrry;
qrry.exec("SELECT name FROM users ORDER BY wins DESC WHERE rowid=1");
if (qrry.isActive())
{
    while(qrry.next())
    {
        name1=qrry.value(0).toString();
    }
}

如果我删除ORDER BY wins DESC,我从 db 中获取名字。但我想先对它进行排序,ORDER BY看起来不像是这样做的正确方法。你能帮帮我吗?

正如@hank所说,您的查询应该是:

qrry.exec("SELECT name FROM users ORDER BY wins DESC LIMIT 3");

LIMIT子句只允许您在结果集中获取有限数量的结果。 在这种情况下,您将仅获得wins列的 3 个最大值的name值。

你写的WHERE条款没有理由在那里。


编辑:

如何使用 LIMIT 读取这样的名称:"名称 1=db 中的第一个名字"、"名称 2=第二个名字"、"名称 3=第三个名字"?

如果你想在 3 个不同的变量中获取 3 个名称,你可以写这样的东西:

QString name1, name2, name3;
if (qrry.isActive())
{
    int i = 0;
    while(qrry.next())
    {
        switch(i)
        {
            case 0:
                name1 = qrry.value(0).toString();
                break;
            case 1:
                name2 = qrry.value(0).toString();
                break;
            case 2:
                name3 = qrry.value(0).toString();
                break;
        }
        i++;
    }
}

这是一种方法,但您也可以将名称放在数组或向量中。在您的情况下,这并不重要,因为您只需要 3 个名字,但如果您想保留超过 10 或 50 个名字,处理数组或向量会更容易。

LIMIT 3子句可确保结果集中最多有 3 个结果,并且在while(qrry.next())循环中只会循环 3 次。