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

Ale*_*lex 1 c++ sqlite qt

我再次需要你的帮助.我想从我的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();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我删除ORDER BY wins DESC,我从db得到第一个名字.但我想先对它进行排序,ORDER BY看起来不是正确的方法.你能帮我么?

Ale*_*ph0 5

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

qrry.exec("SELECT name FROM users ORDER BY wins DESC LIMIT 3");
Run Code Online (Sandbox Code Playgroud)

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

WHERE你写的这个条款没有理由在那里.


编辑:

我怎么能读这样的名字:"name1 = db中的名字","name2 = 2nd name","name3 = 3rd name"使用LIMIT?

如果你想在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++;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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