2009-07-24 122 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值。显然,你需要确保安全。