我想實現或使用允許在SQLite中逐步瀏覽表的功能。穿越SQLite表
如果我有一個表格Products
有100k行,我想一次檢索10k行。類似於網頁將列出數據的方式,並具有鏈接來遍歷數據。
是否有選擇語句可以使這個簡單?我看到並嘗試將ROWID與LIMIT結合使用,如果不訂購數據,似乎可以。
//這似乎工程,如果不訂購。
SELECT * FROM Products WHERE ROWID BETWEEN x AND y;
我想實現或使用允許在SQLite中逐步瀏覽表的功能。穿越SQLite表
如果我有一個表格Products
有100k行,我想一次檢索10k行。類似於網頁將列出數據的方式,並具有鏈接來遍歷數據。
是否有選擇語句可以使這個簡單?我看到並嘗試將ROWID與LIMIT結合使用,如果不訂購數據,似乎可以。
//這似乎工程,如果不訂購。
SELECT * FROM Products WHERE ROWID BETWEEN x AND y;
您是否在尋找offset and limit? SQLite支持這些。然後您可以使用SQLite也支持的order by。
編輯:要詳細,你可以這樣做:
Select * from Products order by name limit 10000 offset 10000;
這從表中,按名稱排序取第二10K頁。在處理限制/偏移量和排序時注意性能問題。
你可以在你的代碼中使用這個查詢,並將值傳遞給偏移的參數化值,你爲每個需要的記錄塊增加10k。 – 2010-04-15 14:36:58
謝謝,這正是我正在尋找的。 – galford13x 2010-04-15 14:38:52
感謝您修復我的錯誤羊 – 2010-04-15 14:54:39
如果您訂購行,會發生什麼? – 2010-04-15 14:03:37
如果未明確指定,ROWID仍然可用,但不能保持爲靜態。也就是說,隱式ROWID將由行物理地寫入表中的順序決定。因此,如果表按名稱順序存儲,並且我想按數量進行排序,則ROWID將不會表示返回的順序,而是隱式的ROW編號。 – galford13x 2010-04-15 14:14:29
你應該儘量避免在SQL工作中儘量使用任何內建的ROWID。這不是SQL標準的一部分,它是一個附加組件,不能保證在大多數RDBMS上。我會使用ORDER BY子句來創建一個排序。我發現大多數查詢都可以在不依賴隱式行號的情況下編寫,並且有一點想象力。 – 2010-04-15 14:33:41