2009-07-24 181 views
1

我有一個sql查詢返回了很多結果,我想生成一個html表來顯示它們。問題是我不想將它們全部顯示在一個頁面上,我想一次抓取10個,並翻閱結果頁面。從sql查詢生成html報告

我想爲每個查詢返回100個結果,但我無法弄清楚如何在下一個查詢中獲取NEXT 100。

+0

您參考的內容稱爲分頁,供將來參考。 – 2009-07-24 00:39:01

+0

您正在使用特定的SQL數據庫/方言嗎?服務器/ sql語言通常決定如何對結果集進行分頁。 – jrista 2009-07-24 00:42:26

回答

1
-- return the first 100 rows 
SELECT * FROM table LIMIT 0, 100 

-- return the next 100 rows 
SELECT * FROM table LIMIT 100, 100 

-- and the next 
SELECT * FROM table LIMIT 200, 100 

您需要做的是將一個變量傳遞給您的腳本,該變量將爲每個頁面創建適當的SQL LIMIT語句。

1

您會在底部定義一個限制。第一頁:

LIMIT 0,100 

第二頁

LIMIT 100,100 

等。

當您在頁面上放置'下一步'鏈接時,請創建一個$ _GET參數,其中表示start = 100。然後,使用該起始參數作爲限制中的第一個值,並向其中添加100以獲取第二個值。

那麼,它到底會是什麼樣子:

if(empty($_GET['start'])) 
{ 
    $start = 0; 
} 
else 
{ 
    $start = $_GET['start']; 
} 

$SQL = "SELECT * FROM TABLE WHERE 1=1 LIMIT ".$start.",100;"; 

query($sql); 

$link = "<a href=\"?start=".$start+100."\">Next</a>"; 

如果要在進一步擴大,你可以添加一個num參數。這將允許用戶控制他們看到的記錄數量。所以:

if(empty($_GET['start'])) 
{ 
    $start = 0; 
} 
else 
{ 
    $start = $_GET['start']; 
} 
if(empty($_GET['num'])) 
{ 
    $start = 100; 
} 
else 
{ 
    $start = $_GET['num']; 
} 

$SQL = "SELECT * FROM TABLE WHERE 1=1 LIMIT ".$start.",".$num.";"; 

query($sql); 

$link = "<a href=\"?start=".$start+100."&num=".$num."\">Next</a>"; 

當然,你想要sanatize /驗證所有這些數字。

0

您將需要使用LIMIT sql語句。使用像SELECT * FROM table LIMIT $ var,100這樣的查詢,然後將url作爲/page.ext?page=2。使用get(即php中的$ _GET ['page']),並將該數乘以100,以獲得$ var值。顯然,你需要確保安全。