2009-03-02 72 views
27

我想獲得選定行的數量以及所選數據。目前我必須使用兩個SQL語句:如何從sqlite3中獲取所選結果的行數?

一個是

select * from XXX where XXX; 

另一種是

select count(*) from XXX where XXX; 

可以將其與一個單一的SQL字符串實現呢?

我檢查了sqlite3的源代碼,發現sqlite3_changes()的功能。但是該功能僅在數據庫更改時有用(在insert, delete or update之後)。

任何人都可以幫我解決這個問題嗎?非常感謝你!

+0

雖然答案是肯定的,大部分的答案下方增加了複雜性,你應該避免。運行兩個查詢沒有任何問題。如果在查詢之後處理數據,則還可以使用生成的集合對象的`count()`或`size()`方法,具體取決於您使用的語言。 – alttag 2016-12-06 21:15:12

回答

0

一旦你已經有select * from XXX結果,你可以在你的程序中找到數組的長度嗎?

+1

我可以。但直到我瀏覽所有結果行。我想盡快得到計數 – user26404 2009-03-02 08:53:11

+2

在這種情況下,我猜想運行兩個SQL查詢確實是最簡單的解決方案。 – 2009-03-02 09:25:39

2

你可以將它們組合成一個單一的語句:

select count(*), * from XXX where XXX 

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

這隻返回行數並且只返回最後一行。 – idursun 2009-03-02 08:28:34

+1

是的,我不能使用這種方法得到確切的結果行。 – user26404 2009-03-02 08:51:59

0

如果使用sqlite3_get_table,而不是準備/步驟/完成,你會得到所有結果一次在一個數組(「結果表」),包括列的數量和名稱以及行數。然後你應該可以自由結果sqlite3_free_table

+0

謝謝。我會試一試。 – user26404 2009-03-02 08:56:33

13

SQL不能混合單行(計數)和多行結果(從表中選擇數據)。這是返回大量數據的常見問題。這裏有一些提示如何處理:

  • 讀取前N行並告訴用戶「有多於N行可用」。不是很精確,但通常足夠好。如果保持光標打開,當用戶點擊視圖底部時,您可以獲取更多數據(Google Reader會這樣做)

  • 不是直接選擇數據,而是先將其複製到臨時表中。 INSERT語句將返回複製的行數。稍後,您可以使用臨時表中的數據來顯示數據。您可以將「行號」添加到此臨時表中,以使分頁更加簡單。

  • 在後臺線程中獲取數據。這允許用戶在數據網格或表格填充更多數據時使用您的應用程序。

15

嘗試這種方式

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

只是嘗試this

0

你應該試試這個:

​​
相關問題