簡體   English   中英

使用 offset+limit 查找 mySQL 查詢中的結果總數

[英]Find total number of results in mySQL query with offset+limit

我正在使用 Codeigniter 進行分頁功能,但我認為這通常適用於 PHP/mySQL 編碼。

我正在使用偏移量和限制檢索目錄列表,具體取決於每頁所需的結果數。 但是要知道所需的總頁數,我需要知道(結果總數)/(限制)。 現在我正在考慮第二次運行 SQL 查詢,然后計算所需的行數,但不使用 LIMIT。 但我認為這似乎是對計算資源的浪費。

有沒有更好的方法? 謝謝!

編輯:我的 SQL 查詢也使用 WHERE 來選擇具有特定“category_id”的所有行

SELECT COUNT(*) FROM table_name WHERE column = 'value'將很快返回匹配該條件的表中的記錄總數。

數據庫SELECT操作通常是“便宜的”(資源方面),所以不要對以合理的方式使用它們感到太糟糕。

編輯:在 OP 提到他們需要該功能之后添加了WHERE

考慮到SQL_CALC_FOUND_ROWS需要在之后調用FOUND_ROWS() ,如果您想使用從限制返回的結果獲取總計數而不必調用第二個SELECT ,我將使用從子查詢派生的JOIN結果:

SELECT * FROM `table` JOIN (SELECT COUNT(*) FROM `table` WHERE `category_id` = 9) t2 WHERE `category_id` = 9 LIMIT 50

注意:每個派生表都必須有自己的別名,所以一定要命名連接表。 在我的示例中,我使用了t2

SQL_CALC_FOUND_ROWS 查詢修飾符和隨附的 FOUND_ROWS() 函數自 MySQL 8.0.17 起已棄用,並將在未來的 MySQL 版本中刪除。 作為替代,考慮使用 LIMIT 執行查詢,然后使用 COUNT(*) 且不使用 LIMIT 的第二個查詢來確定是否還有其他行。 例如,而不是這些查詢:

SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT FOUND_ROWS();

請改用這些查詢:

SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT COUNT(*) WHERE id > 100;

COUNT(*) 受某些優化的影響。 SQL_CALC_FOUND_ROWS 會導致一些優化被禁用。

您可以使用 2 個查詢,如下所示,一個是獲取有限制的數據,另一個是獲取匹配行的總數。

前任:

SELECT * FROM tbl_name WHERE id > 1000 LIMIT 10;
SELECT COUNT(*) FROM tbl_name WHERE id > 1000;

正如所描述的Mysql導向,這是最優化的方式,並且還SQL_CALC_FOUND_ROWS查詢改性劑和FOUND_ROWS()函數被棄用的MySQL 8.0.17的

SELECT COUNT(id) FROM `table` WHERE `category_id` = 9

為您提供特定類別的行數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM