0

これは何よりも論理的な問題だと思います。データベースには、ソース参照と isLandscape=1 などのタグのブール値を介して保存された写真があります。質問されたタイプに基づいて結果のページをトラバースするシステムを作成しました。以下は、私が直面していることの例です。0ページから22ページまでの同じ12枚の写真しか見えません。その後、新しい写真が見え始めます。今まで気がつかなかったので、見落としていたと思います。私が気づいたことの 1 つは、page22*12pictures = 264 で、最初に表示された新しい画像 ID と同じです。ここでエラーを確認できます(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;
}
?>

これは、私が見落としている明らかなバグのようです。助けてくれてありがとう。

4

1 に答える 1

1

これら2つのクエリの違いは何ですか?

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

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

回答:潜在的にまったく違いはありません。データベースエンジンは、どちらの場合でも、id100から111までの画像を返すかどうかを決定できます。その結果セットは、いずれかのクエリのすべての条件を満たしています。

代わりに、次のようなクエリを試してください。

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

ORDER BY id本当に鍵です。ORDER BYデータベース結果のページングは​​、通常、との組み合わせで行われますLIMIT

于 2012-05-23T18:28:44.627 に答える