2012-12-25 43 views
-1

行返回子在我的Web應用程序之一,我需要證明從MySQL結果作爲列表(共6個)與環繞

在點擊「Next」按鈕,需要顯示未來6項成果通過Ajax調用。 再次點擊「下一步」想要顯示更多6個結果。 Vise verse on Previous click也。

我實現了代碼和工作正常,但其餘

假設只有14個匹配小邏輯要求導致

我想告訴6日開始,「下一步」我想告訴未來6, 「下一步」只有2個剩餘所以想顯示從第一圈

即,在這種情況下想要顯示剩餘的2 + 4 12,14,1,2,3,4(總共6)

還有一個例子:如果有15個結果,我想要顯示13,14,15,1, 2,3

請指點一下在MySQL這個邏輯一點點,PHP

+0

我只是想簡單的mysql選擇查詢..因爲這隻會在「最後的下一步」顯示最後2。 – ramesh

+1

考慮修改您的問題的標題,以便對問題有所瞭解。 – DWright

回答

2

有當然limit的,但沒有內置迴繞,據我所知。可能的工作是將union附加到您的主要選擇。這樣

select * from table limit 13, 6 
union 
select * from table limit 0, 6 

東西雖然,你必須定義一些全局order by有它正確的順序。

另一種方法是將前六個結果行保存在某個PHP數組中,並在當前結果集太小(即小於6)時追加它們。

3

你可以做這樣的事情:

$maxPerPage = 6; 
//Suppose you have 14 matched results and you are on page 3 
$remainingRecords = $totalRecords - ($maxPerPage * ($pageNum - 1)); 
if($remainingRecords < $maxPerPage) { 
    $moreToShow = $maxPerPage - $remainingRecords 
    // Union $moreToShow number of records using LIMIT $moreToShow to your SQL query 
} 

我希望幫助...

2

假設你正在使用limit讓每一組行的,你可以使用

limit ($page-1)*6+1, 6 

這將返回n行。如果n是6,則返回這些行。如果是< 6,做另一個查詢有:

limit 6-$n 

附加這些行第一個查詢返回的行,並返回給客戶端。

1

下面是一個可移植的純粹的SQL版本,您可以使用它作爲基礎,替換您需要/想要的大量PHP查詢構造。查詢(和測試表)可在http://sqlfiddle.com/#!2/4f85a/51

SET @pagesToGet = 6; -- this and the following @variables 
--      can be replaced by stuff from php variables 
--      as you construct the query    
SET @startingPageNumber = 12; 
SET @maxPageNumber = (SELECT MAX(PageNumber) FROM Pages); 
SET @maxPageNumberToGet = LEAST(@startingPageNumber + @pagesToGet - 1,@maxPageNumber); 

SELECT pagenumber FROM 
(
    -- This is the main query 
    SELECT 'a' as ordering_field, pagenumber 
    FROM pages 
    WHERE pagenumber >= @startingPageNumber and pagenumber <= @maxPageNumberToGet 
    UNION 
    -- The following supplemental query gets pages from the beginning, 
    -- when required 
    SELECT 'b' as ordering_field, pagenumber 
    FROM pages 
    WHERE pagenumber >= 1 and pagenumber <= (@pagesToGet - (@maxPageNumberToGet - @startingPageNumber + 1)) 
) t 
ORDER BY ordering_field,pagenumber 

-- using ordering_field above ensures that the pages retrieved in 
-- supplemental query. This is necessary, since nothing guarantees 
-- the ordering from the UNION