我的目标是查询数据库并在两个文章容器之间平均分配结果。在两个容器中调用该函数并运行一个块(if或else)并输出结果。
该函数使用一个静态计数器,并在其调用结束时递增,以便下一个调用激活第二个部分。
由于我希望两个容器分开接近,我使用mysql_num_rows($ result)来查找总行数,然后将其除以2并将其四舍五入为变量$ halfWay。 for循环在if块中运行,直到增量小于一半。它递增$ counter并结束。
在第二次调用时,运行else块并启动for循环。这是我的问题所在。目前正如
$row = mysql_fetch_row($result)
重新开始。我想知道是否有办法选择提取开始的位置,或者我是否最好完全取出一次然后输出数据?以下是代码。
//This function will attempt to split the faq query into two containers
function faqQuery() {
$query = "SELECT questionPosition, questionText, answerText
FROM faqPage
ORDER BY questionPosition";
$result = mysql_query($query)
or
die ("<b>Query Failed</b><br />$query<br />" . mysql_error());
/ * $ numRows用于捕获查询中的问题/答案对。* /
$numRows = mysql_num_rows($result);
/ * $ halfWay用于查找问题/答案的中位数
pairs to near evenly split the number between two containers*/
$halfWay = round($numRows/2);
/ *此静态计数器用于跟踪对函数的调用次数。* /
static $counter = 0;
//The first IF block generates the FAQ for div 1
if ($counter == 0) {
for ($i=0; $i<$halfWay; $i++) {
$row = mysql_fetch_row($result);
$questionPosition = $row[0];
$questionText = $row[1];
$answerText = $row[2];
echo "<p class=\"faqText\">$questionText<br /><br />\n";
echo "$answerText</p>\n";
} //end For
//The ELSE block generates the FAQ for div 2
} else {
for ($i=$halfWay; $i<$numRows; $i++) {
$row = mysql_fetch_row($result);
$questionPosition = $row[0];
$questionText = $row[1];
$answerText = $row[2];
echo "<p class=\"faqText\">$questionText<br /><br />\n";
echo "$answerText</p>\n";
} //End for
}//End else
$counter++; //Increment counter at the end of the function.
}//End function faqQuery();
答案 0 :(得分:0)
您可以将它们全部取出并根据需要进行交错,只要您确信记录始终适合内存,这就很好。如果你不确定可能有多少行,那可能是几千或几百万,你会想要更加谨慎。
增量方法使用SELECT
上的LIMIT
和OFFSET
子句来更好地确定您想要的范围。例如,要获取前50个匹配项:
SELECT ... FROM ... LIMIT 50
接下来的50:
SELECT ... FROM ... LIMIT 50 OFFSET 50
请记住,非常高的偏移值可能会严重拖累性能,因此请仔细测试,但这是分页的基础。