【问题标题】:How to get data from sqlite after sorting?排序后如何从sqlite中获取数据?
【发布时间】:2015-02-02 15:04:22
【问题描述】:

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

【问题讨论】:

  • 为什么 order by 不是正确的方法?我一直在我的 Qt 应用程序中使用它。
  • 为什么要在语句中添加WHERE 子句?
  • 我想你应该使用LIMIT 3 子句,而不是WHERE rowid=1
  • 同意order byWHERE rowid=1 部分没有意义。
  • @hank,如果我使用 LIMIT,如何读取存储在不同 QStrings 中的数据库中的名称?比如..“name1=db 中的第一个名字”、“name2=2nd name”、“name3=3rd name”。

标签: c++ qt sqlite


【解决方案1】:

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

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

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

您编写的WHERE 子句没有理由出现。


编辑:

如何使用 LIMIT 读取如下名称:“name1=db 中的名字”、“name2=2nd name”、“name3=3rd name”?

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

【讨论】:

  • 好的,我知道了,但是我怎样才能读取这样的名称:“name1=db 中的名字”、“name2=2nd name”、“name3=3rd name”使用 LIMIT?
  • @Alex 使用您在问题中编写的循环
  • @Alex 我刚刚用一种方法编辑了我的答案。我没有测试它,但它应该做你想要的。
  • 非常感谢你们,非常感谢你们的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-30
  • 1970-01-01
  • 2015-11-24
  • 2021-06-02
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多