0

我有一个使用 ODB 和 SQLite 数据库的 C++ 应用程序。我想计算任何查询将返回的结果数。目前,我正在做类似以下的事情:

using query = odb::query<person>;
auto filteredResults( db.query<person>(query::first == "John") );
const auto count = std::distance( filteredResults.begin(), filteredResults.end() );

是否有更有效的方法来计算将返回的查询结果的数量?

我知道 SQLite 提供了一个似乎更有效的 COUNT 函数( https://www.sqlitetutorial.net/sqlite-count-function/ ),但是有没有办法通过 ODB 调用它,或者我需要重新- 在本机 SQLite ( https://www.codesynthesis.com/products/odb/doc/manual.xhtml#3.12 ) 中编写查询?

4

1 回答 1

0

就我而言,答案是使用 ODB 视图(https://www.codesynthesis.com/products/odb/doc/manual.xhtml#10)。

此代码设置视图。

#pragma db view object(person)
struct PersonCount
{
    #pragma db column("COUNT(" + person::first + ")")
    std::size_t numPeople;
};

然后它可以用来计算匹配给定查询的人数。

transaction t( db.begin() );
PersonCount pc( db.query_value<PersonCount>( query::first == "John" ) );
t.commit();

cout << pc.numPeople << '\n';
于 2020-04-01T08:36:31.887 回答