如果我有:
$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 行(无需获取更多,因为我们不会读取更多结果),然后我们更新查询以检索下一行。
(上面的代码特别没有效率)