我再次需要你的帮助。 我想从我的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
看起来不是正确的方法。
你能帮我吗?
答案 0 :(得分:5)
正如@hank所说,你的查询应该是:
qrry.exec("SELECT name FROM users ORDER BY wins DESC LIMIT 3");
LIMIT
子句允许您仅在结果集中获得有限数量的结果。在这种情况下,您只会获得name
列的3个最大值的wins
值。
你写的WHERE
条款没有理由在那里。
修改强>
如何读取这样的名字:" name1 = db"中的名字," name2 =第二名"," name3 =第三名"使用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++;
}
}
这是一种方法,但您也可以将名称放在数组或向量中。在你的情况下,它并不重要,因为你只需要3个名字,但如果你想保留10个或50个以上的名字,那么处理数组或向量会更容易。
LIMIT 3
子句确保您的结果集中最多有3个结果,并且您只会在while(qrry.next())
循环中循环3次。