2012-05-23 4 views
0

Я чувствую, что это более логичная проблема, чем что-либо. База данных имеет изображения, сохраненные с помощью ссылки на источник, и логические значения для тегов, например. isLandscape = 1. Я создал систему для обработки страниц результатов по запрошенным типам. Ниже приведен пример того, с чем я столкнулся. Я вижу только те 12 изображений со страницы 0 -> стр. 22. Затем я начинаю видеть новые. Я думаю, что я просто забыл эту ошибку, так как до сих пор я ее не замечал. Одна вещь, которую я заметил, это page22 * 12pictures = 264, которая совпадает с первым новым идентификатором изображения, который виден. Вы можете увидеть ошибку 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

В чем разница между этими двумя запросами?

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 BY и LIMIT.

Смежные вопросы