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


Change the value of Limit x,y in mysql_fetch_array statement after every echo?

如果我有:

$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的值已经设置好了。

你做错了!执行查询时需要提供正确的值。然后,当您获得结果集时,您有 $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++;
}
您可以使用

for 循环来递增 $q.. 的值,而在 foor 循环中,您可以放置查询。

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

$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 行(无需获取更多,因为我们不会读取更多结果),然后我们更新查询以检索下一行。

(上面的代码特别没有效率)