每次回显后,在mysql_fetch_array语句中更改Limit x,y的值?

时间:2011-05-14 06:21:40

标签: php mysql

如果我有:

$q = 1;
$w = 10
$result_new= mysql_query("SELECT * FROM Events LIMIT $q, $w");


while($row = mysql_fetch_array($result_new))
{
   echo $row['title'];
}

有没有办法改变$ q的值,以便在每个while语句循环后它是$ q ++?

如果我把它放在while语句中:

while($row = mysql_fetch_array($result_new))
{
   echo $row['title'];
   $q++
}

它不起作用,因为已经设置了$ q的值。

3 个答案:

答案 0 :(得分:0)

你做错了!在进行查询时,您需要提供正确的值。然后,当您获得结果集时,您有$w行等待提取,例如mysql_fetch_array

如果由于某种原因,您在开始时不知道所需的行数,则必须进行第二次查询以获取剩余的行。

LIMIT $q, $w的工作方式是$q决定起始位置,$w决定要抓取的记录数。

LIMIT 0, 10等同于LIMIT 10只获取结果集的前10行。

LIMIT 10, 10给出下一个10. LIMIT 20, 10给出接下来的10个。换句话说,第一个参数是从0开始的起始位置,第二个参数是行数,而不是“结束位置”。

编辑:新信息后的建议。

$num_pages = 4;    // Get 4 pages...
$page_size = 10;   // ... with 10 rows each


for($i=0; $i<$num_pages; $i++){
    $offset = $i * $page_size;

    $result_new= mysql_query("SELECT * FROM Events LIMIT $offset, $page_size");

    // Add one since MySQL counts from 0 but humans usually from 1
    echo "<h1>Page ".$i+1."</h1>";

    // Loop through one page
    while($row = mysql_fetch_array($result_new)){
        echo $row['title'];
    }
}

执行比您需要的更多SQL查询仍然不是很有效,因此您可以通过一个小技巧在一个查询中完成所有操作。这段代码应该输出与我上面的代码相同的东西。

$num_pages = 4;    // Get 4 pages...
$page_size = 10;   // ... with 10 rows each
$position = 0;     // Position counter used in the loop
$page = 1;         // Since this will not be used in DB calls, we can start from 1

$total_rows = $num_pages * $page_size;

$result_new= mysql_query("SELECT * FROM Events LIMIT $total_rows");

while($row = mysql_fetch_array($result_new)){
    // Little trick to check if we're at the beginning of a page.
    if($position%$page_size == 0){
        echo "<h1>Page ".$page."</h1>";
        $page++;
    }

    echo $row['title'];

    $position++;
}

答案 1 :(得分:-1)

根据您的评论,如果您真的想在每行之间更新您的查询:

$q = 0;
$w = 10;

for ( $i = 0; $i < $w; i++ )
{
    $result_new= mysql_query("SELECT * FROM Events LIMIT $q, 1");
    $row = mysql_fetch_array($result_new);
    echo $row['title'];

    $q++;
}

这里,我们查询1行(不需要更多,因为我们不会读取更多结果),然后我们更新查询以检索下一行。

(以上代码特别无效)

答案 2 :(得分:-1)

您可以使用for循环来增加$ q的值。在In for循环中,您可以放置​​查询..