3 回答

TA貢獻1942條經(jīng)驗 獲得超3個贊
不,這就是要分頁的應(yīng)用程序必須要做的事。它是可靠且防彈的,盡管它使查詢兩次。但是您可以將計數(shù)緩存幾秒鐘,這會很有幫助。
另一種方法是使用SQL_CALC_FOUND_ROWS子句,然后調(diào)用SELECT FOUND_ROWS()。除了必須FOUND_ROWS()隨后進行調(diào)用之外,還有一個問題:MySQL中有一個bug,它會影響ORDER BY查詢,使其在大表上比兩個查詢的幼稚方法慢得多。

TA貢獻1825條經(jīng)驗 獲得超6個贊
我?guī)缀鯊膩頉]有做過兩次查詢。
只需返回比需要多的一行,僅在頁面上顯示10,如果顯示的行多,則顯示“下一步”按鈕。
SELECT x, y, z FROM `table` WHERE `some_condition` LIMIT 0, 11
// iterate through and display 10 rows.
// if there were 11 rows, display a "Next" button.
您的查詢應(yīng)以最相關(guān)的順序返回。通常,大多數(shù)人都不會在意412中的第236頁。
當您進行Google搜索時,結(jié)果不在第一頁上,您可能會轉(zhuǎn)到第二頁,而不是第9頁。

TA貢獻1911條經(jīng)驗 獲得超7個贊
避免重復(fù)查詢的另一種方法是,首先使用LIMIT子句獲取當前頁面的所有行,然后,如果檢索到最大行數(shù),則僅執(zhí)行第二個COUNT(*)查詢。
在許多應(yīng)用程序中,最可能的結(jié)果是所有結(jié)果都適合一頁,并且必須進行分頁是一種例外,而不是常規(guī)。在這種情況下,第一個查詢將不會檢索最大數(shù)量的結(jié)果。
例如,關(guān)于stackoverflow問題的答案很少會濺到第二頁上。對答案的評論很少溢出到5個左右才能顯示全部。
因此,在這些應(yīng)用程序中,您只需簡單地先使用LIMIT進行查詢,然后只要沒有達到該限制,就可以確切知道有多少行而無需執(zhí)行第二個COUNT(*)查詢-這應(yīng)該涵蓋大多數(shù)情況。
添加回答
舉報