2011-08-08 71 views
4

我遇到問題了。我想在沒有觸及LIMIT的情況下從桌面上只獲得300行。我需要LIMIT進行分頁。這在MySQL中可能嗎?選擇沒有LIMIT的n行mysql

我當前的查詢:

SELECT a.title, a.askprice, a.picture, a.description, a.userid, a.id 
    FROM mm_ads AS a WHERE a.category = 227 AND a.status = 1 
    ORDER BY id DESC LIMIT 40,20 

編輯:

簡單的解釋:我需要從過去的300個廣告系統獲得,但我需要保持分頁,因爲我不想在一個頁面中列出300行..

+3

爲什麼你想要收集更多的記錄比你適合的頁面?如果您需要顯示20到40條記錄,則不需要收集其他280條記錄。 – hoppa

+3

我想您必須提供更多信息,而不是暗示無法使用的解決方案,而無需說明其用途。 – Yoshi

+0

您對哪300行感興趣?第一個300總是? – hakre

回答

6
SELECT * 
FROM (
    SELECT a.title, a.askprice, a.picture, a.description, a.userid, a.id 
    FROM mm_ads AS a 
    WHERE a.category = 227 AND a.status = 1 
    ORDER BY id DESC 
    LIMIT 300 
) t 
LIMIT 40,20 

如果目的是爲了加快查詢,那麼你可以創建一個綜合指數:

ALTER TABLE `mm_ads` 
    ADD INDEX `mm_ads_index` (`category` ASC, `status` ASC, `id` DESC); 
+6

爲什麼你要這麼做......? – hoppa

+5

@hoppa我不知道。這只是他的問題的直接答案:) – Karolis

+0

從語義上講,這是一個正確的答案是的,但它過度複雜的查詢很多,這是不必要的。 – hoppa

2

使用SQL_CALC_FOUND_ROWS後您的選擇:

SELECT SQL_CALC_FOUND_ROWS * 

編輯:

而在PHP中,運行該行即可行量:

list($int_rows) = mysql_fetch_row(mysql_query("SELECT FOUND_ROWS()")); 

這將大大通過所有行獲取總量,但不能獲取所有行。

EDIT2:

可能已經misunderstod你的問題,但是這是分頁的常見解決方案。

+0

感謝您分享您的解決方案..但我不認爲,這是我正在尋找.. – Puzo

0

,你能做的僅僅是從數據庫中獲取所有的300行,並將其保存在一個數組,然後分頁數組索引

1

簡單的解決方案還有一件事是 適合計算你需要的結果只量和使用它在你的分頁 然後使用限制在查詢中加載的每個頁面

SELECT a.title,a.askprice,a.picture,a.description,a.userid上的數據,A.ID FROM mm_ads AS一WHERE a.category = 227 AND a.status = 1 ORDER BY ID DESC LIMIT 40,20

它不管你的數據庫有多大,它只會給你20個結果(儘管它搜索完整的數據庫)