麻烦在if语句中设置PHP变量

时间:2011-08-22 19:28:19

标签: php ajax

我有一个Ajax调用来创建一个图库。有一个组合框可以设置每页的图像数量,以及用于浏览页面的分页。它工作正常,除了如果一个人在最后一页,并且他们增加每页的图像数量,它将重新加载到当前页码。这是一个问题,因为现在页面较少,因此页面为空白。换句话说,您最终会以page 7 of 5结束。

我认为问题出在PHP中,因为这是计算页数的地方。我已经考虑过if声明来解决这个问题:

if ($page > $no_of_paginations) {
 $page = $no_of_paginations;
}

但是,我不知道放在哪里。原因是,$page需要在 mysql_query之前定义,但{<1}}在查询后定义

关于如何实现这一功能的任何想法?

我将在下面发布相关代码:

$no_of_paginations

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

正如您目前所做的那样,将最后一部分移到主查询上方是没有问题的。

使用MySQL查找总记录的更好方法是在主查询中使用SQL_CALC_FOUND_ROWS关键字(所以这里是SELECT SQL_CALC_FOUND_ROWS imgURL, imgTitle FROM images WHERE etc)然后您可以查询SELECT FOUND_ROWS()并获取在上一个查询中找到的记录数。除了更快,更高效之外,这还可以避免在两个查询之间添加记录时的竞争条件。

但是,在这种情况下,您可能只是以相反的顺序执行两个当前查询,因为您唯一的另一个选项是最后检查并在必要时重复。

答案 1 :(得分:1)

您应该使用查询:

$query_pag_data = "SELECT SQL_CALC_FOUND_ROWS `imgURL`,`imgTitle` FROM `images` ".
"ORDER BY `imgDate` DESC LIMIT $start, $per_page";

而不是

$query_pag_num = "SELECT COUNT(*) AS count FROM images";

使用

$query_pag_num = "SELECT FOUND_ROWS()";

答案 2 :(得分:0)

如果您在脚本中先前执行“SELECT COUNT(*)...”查询(至少在其他查询之前),您之前会有$ no_of_paginations,并且可以使用它将$ page压缩到正确的范围

答案 3 :(得分:0)

有时你只需要咬紧牙关并进行两次查询。接受用户提供的“我想要页面X”值,并尝试获取该特定页面。如果它最终超过可用数据的末尾,您可以说“嘿,等等......这是不对的”并中止,或者重做循环并默认为最后一个可用页面。

while(true) {
     $sql = "select sql_calc_found_rows .... limit $X,$Y";
     $result = mysql_query($sql) or die(mysql_error());

     $sql = "select found_rows();"; // retrieve the sql_calc_found_rows_value
     $res2 = mysql_query($sql);

     $row = mysql_fetch_array($res2);
     $total_rows = $row[0];

     if ($total_rows < $requested_row) {
        ... redo the loop and request last possible page ...
     } else {
        break;
     }
}

有关found_rows()函数here的详细信息。