如何从sqlite3中获取选中结果的行数?

0lvr5msh  于 12个月前  发布在  SQLite
关注(0)|答案(9)|浏览(191)

我想得到选定的行数以及选定的数据。目前我必须使用两个sql语句:
一是

select * from XXX where XXX;

字符串
另一个是

select count(*) from XXX where XXX;


它可以用一个SQL字符串实现吗?
我检查了sqlite3的源代码,发现了sqlite3_changes()的函数。但该函数仅在数据库更改时(在insert, delete or update之后)才有用。
有人能帮我解决这个问题吗?非常感谢!

bmvo0sr5

bmvo0sr51#

尝试这种方式

select (select count() from XXX) as count, * 
from XXX;

字符串

u0sqgete

u0sqgete2#

SQL不能混合单行(计数)和多行结果(从表中选择数据)。这是返回大量数据的常见问题。以下是如何处理此问题的一些提示:

  • 读取前N行并告诉用户“超过N行可用”。不是很精确,但通常足够好。如果你保持光标打开,你可以在用户点击视图底部时获取更多数据(Google Reader就是这样做的)
  • 不直接选择数据,先将其复制到一个临时表中,SQL语句会返回复制的行数,以后可以使用临时表中的数据来显示数据,可以在这个临时表中添加一个“行号”,使分页更加简单。
  • 在后台线程中获取数据。这允许用户在数据网格或表填充更多数据时使用您的应用程序。
dpiehjr4

dpiehjr43#

select (select COUNT(0) 
            from xxx t1 
            where t1.b <= t2.b 
            ) as 'Row Number', b from xxx t2 ORDER BY b;

字符串
试试this

drnojrws

drnojrws4#

您可以将它们合并组合成一个语句:

select count(*), * from XXX where XXX

字符串

select count(*) as MYCOUNT, * from XXX where XXX

7dl7o3gd

7dl7o3gd5#

要获取唯一标题的数量,您需要将DISTINCT子句作为以下语句传递给EQUIPMENT函数:

SELECT
 COUNT(DISTINCT column_name)
FROM
 'table_name';

字符串
来源:http://www.sqlitetutorial.net/sqlite-count-function/

wdebmtf2

wdebmtf26#

对于那些仍在寻找另一种方法的人,我发现更优雅的方法是使用CTE来获取行的总数。这确保了计数只计算一次:

WITH cnt(total) as (SELECT COUNT(*) from xxx) select * from xxx,cnt

字符串
唯一的缺点是如果需要一个WHERE子句,它应该同时应用于主查询和CTE查询。
在第一条评论中,Alttag说运行2个查询没有问题。我不同意这一点,除非两者都是唯一事务的一部分。如果不是,源表可以在2个查询之间被来自另一个线程/进程的任何一个线程或进程更改。在这种情况下,计数值可能是错误的。

tkclm6bt

tkclm6bt7#

一旦你已经有了select * from XXX的结果,你就可以在程序中找到数组的长度了,对吗?

lymgl2op

lymgl2op8#

如果你使用sqlite3_get_table而不是prepare/step/finalize,你将在一个数组(“结果表”)中一次获得所有结果,包括列的编号和名称,以及行数。

k4emjkb1

k4emjkb19#

如果您愿意,可以像下面这样简单地知道查询生成的记录数

command = "SELECT * FROM table_name WHERE (name1)=? and (name2)=? ....."
cursor.execute(command, (aaaaa,bbbb,........))
rows = cursor.fetchall()
record_number = len (rows)

字符串
如果该数字大于零,则可以使用以下类型的查询访问各个字段的数据
k =行[a][B]
其中“a”的值表示要访问的记录的编号,“b”的值表示要获取的字段的位置

相关问题