我再次需要你的帮助。
我想从我的 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
看起来不是正确的方法。
你能帮我吗?
正如@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 次。