2011-05-10 67 views
2

嗨,人们作为一个新的Web编程即时通讯有一个场景,我需要一些帮助。使用按钮遍历mysql结果集使用php

我试图在页面上有一个'下一步'按钮,它将以迭代的方式从数据库中提取下一个问题。即时通过PHP值直接按钮作为文本。

目前我可以抓取mysql结果集并将它们全部打印出来,或者我可以抓住一行并返回它的字段,但是抓住下一个按钮,然后是另一个按钮的策略是什么,等等。

$result = mysql_query("SELECT * FROM $DB_QUEST_NAME ORDER BY pk_Id DESC;") or die(mysql_error()); 

    while ($row = mysql_fetch_array($result)){ 

    echo $pk_id = $row[0] . "<br>"; 
    echo $question = $row[1]. "<br>"; 
    echo $answera = $row[2] . "<br>"; 
    echo $answerb = $row[3] . "<br>"; 
    echo $answerc = $row[4] . "<br>"; 
    echo $answerd = $row[5] . "<br><br>"; 

    break; 
    } 

在标记中包含getNextPoll.php(上面),其中初始抓取第一个结果将它们显示为按钮。但随着每次后续点击,我想获得下一个,然后下一个等。我知道如何设置按钮文本,并且Im也意识到服务器端客户端方面的责任,但是对于这种类型的开发,Im相当陌生,但它背后的方法很棘手。

任何反馈将不胜感激。谢谢。

回答

2

我相信你正在寻找MySQL's "offset"。这允许您运行一个查询,如... limit 1 offset 0返回第一个结果,然后... limit 1 offset 1返回第二个结果...等等。

(你并不真正需要的“抵消0”,因为这是默认的,无论如何,而是 - 只是想说明这一点。)

编辑:

如果存储的页面变量在这样的网址:www.myPage.com/questions.php?pg=2

然后,你可以这样做:

$numPerPage = 1; 
$pg = $_GET['pg']; 
$nxtPage = $pg++; 
$offset = ($numPerPage * $pg) - 1; 
$question = mysql_query("SELECT * FROM questions LIMIT " . $numPerPage . 
" OFFSET " . $offset); 

然后,你“下一个”链接可以是:

<a href="questions.php?pg=<?=$nxtPage?>">NEXT</a> 
+0

您提到的查询将返回10个结果开始在第10个结果 - 所以 - 它会显示10,11,12 ... 19我建议保持“问题”变量在URL:www.myPage。com?q = 2然后,你的查询可以通过$ _GET ['q']的值来抵消这是否合理?或者我误解了你的评论问题? – Dave 2011-05-10 13:26:38

+0

谢谢你们。偏移对我来说是新的。我在其他一些脚本中使用了限制,但是我在这个脚本中删除了它,以获得整个结果集来迭代。好吧,所以如果我使用后续调用包含'SELECT column FROM table LIMIT 1 OFFSET 1''语句的php脚本,我将如何确保下一次调用将拉动下一行并且不会从头开始(给我总是第一个问题)。将函数包装在函数或其他东西中更好?然后通过触发一个html'next'按钮来调用它。 – 2011-05-10 13:30:49

+0

我编辑了我的答案,以解释我认为你在问什么。 – Dave 2011-05-10 13:35:09

1

$DB_QUEST_NAME表也应该有一个ord列在其中设置您的问题命令(我将不根据其主键:如果你想在以后添加一个新的问题与第一个?)

然后next按钮应该查询$ord + 1(如果有的话)。

+0

好的,谢谢@neurone我会看看它。这是一个有效的观点。作为学习项目的一部分,我只是编写代码以使功能快速运行。 – 2011-05-10 14:35:21

2

您可以使用限制查询

例获得前10个结果:

"SELECT * FROM $DB_QUEST_NAME ORDER BY pk_Id DESC LIMIT 1,10"; 

要按页码获取下一刚乘:

$page_number = isset($_GET['page']) ? $_GET['page'] : 1; 
$results_per_page = 10; 
$end = $results_per_page * $page_number; 
start = $end - $results_per_page; 

"SELECT * FROM $DB_QUEST_NAME ORDER BY pk_Id DESC LIMIT {$start},{$end}"; 

这仅仅是一个基本的例。对于一个真正的实现,使用偏移,如其他人已经解释