在多个页面上显示标记图像失败

时间:2012-05-23 18:20:20

标签: php mysql image pagination

我觉得这比任何事情都更具逻辑性。数据库具有通过源参考保存的图片和用于标签的布尔值,例如isLandscape = 1。我已经建立了一个系统来根据要求的类型遍历结果页面。以下是我所面临的一个例子。我只看到第0页的相同12张图片 - >第22页。然后我开始看到新的。我想我一直在忽视这个错误,因为我直到现在才注意到它。我注意到的一件事是page22 * 12pictures = 264,它与第一个看到的新图片ID相同。您可以看到错误here(只需将p更改为不同的页面)。

<?php
$pictureid   = -1;
$startpage   = 0;
$viewsection = -1;
$uid         = -1;  //user id

$amntperrow  = 4; //how many pictures per row, must correlate with doThumb()'s switch case amounts
$maxrows     = 3;    //how many rows of pictures to drop

if(isset($_GET['pid']) && is_int(intval($_GET['pid']))) $pictureid   = clean($_GET['pid']);
if(isset($_GET['sec']) && is_int(intval($_GET['sec']))) $viewsection = clean($_GET['sec']);
if(isset($_GET['p'])   && is_int(intval($_GET['p'])))   $startpage   = clean($_GET['p']);

$result = generateResult(array("isFlowers"), $startpage);
//**snip** -- drawing thumbnails would happen here

function generateResult($types, $page) {
    global $amntperrow;
    global $maxrows;

    $sqlWheres = "";
    $idAmnt = ($amntperrow*$maxrows)*$page;

    if(isset($types) && !empty($types)) {
        if(count($types) >= 1) {
            for($i = 0; $i<count($types); $i++) {
                $sqlWheres .= $types[$i] . "='1'";
                if($i < count($types)-1) $sqlWheres .= " AND ";
            }
        }
    }        

    $result = "SELECT * FROM pictures WHERE ";
    if(!empty($sqlWheres)) $result .= $sqlWheres . " AND " ;
    $result .= " private='0' AND id >='" . $idAmnt . "' LIMIT " . ($amntperrow*$maxrows);

    return $result;
}
?>

这似乎是我忽略的一个明显的错误。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

这两个查询之间有什么区别?

SELECT *
FROM pictures
WHERE private = '0' AND id >= '24'
LIMIT 12;

SELECT *
FROM pictures
WHERE private = '0' AND id >= '36'
LIMIT 12;

答案:可能没有差别。数据库引擎在任何一种情况下都可以决定它想要返回id的100到111的图片 - 结果集符合任一查询的所有条件。

尝试这样的查询:

"SELECT *
FROM pictures
WHERE private = '0'
ORDER BY id
LIMIT " . $idAmnt . ", " . ($amntperrow * $maxrows)

ORDER BY id确实是关键。通过数据库结果进行分页通常使用ORDER BYLIMIT的组合。