如何从sqlite中获取排序后的数据?

问题描述 投票:0回答:1

我再次需要你的帮助。

我想从我的 sqlite 数据库中获取前 3 个值并将它们存储在 QString 或 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
,我会从数据库中获取名字。但我想先对其进行排序,而
ORDER BY
看起来不是正确的方法。

你能帮我吗?

c++ qt sqlite
1个回答
5
投票

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

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

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

您所写的

WHERE
子句没有理由存在。


编辑:

如何使用 LIMIT 读取这样的名称:“name1=db 中的第一个名称”、“name2=第二个名称”、“name3=第三个名称”?

如果你想获取 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 次。

© www.soinside.com 2019 - 2024. All rights reserved.