Как ограничить элементы из цикла while - PullRequest
4 голосов
/ 24 октября 2010

Это мой цикл while из моего проекта:

<?php
   $select = "SELECT * FROM nk_showcase";
   $query = $db->rq($select);
   while ($user = $db->fetch($query)) {
?>

    <div class="index">
        <a href="details.php?id=<?php echo $user['id']; ?>"><img width="200" height="171" alt="<?php echo $user['title']; ?>" src="<?php echo $url; ?>/images/niagakit/<?php echo $user['thumb']; ?>"/></a>
        <h3><a href="<?php echo $url; ?>/"><?php echo $user['title']; ?></a></h3>
        <p><a href="<?php echo $url; ?>/"><?php echo $user['url']; ?></a></p>
    </div>

<?php } ?>

Как вы уже знаете, этот цикл while будет зацикливать все элементы, найденные в моей базе данных, поэтому я задаюсь вопросом, как ограничить этот циклтолько для 10 элементов только из моей базы данных и как вращать эти элементы при каждом обновлении?

Ответы [ 3 ]

11 голосов
/ 24 октября 2010

В SQL:

$select = "SELECT * FROM nk_showcase LIMIT 0,10";

или в PHP:

$counter = 0;
$max = 10;

 while (($user = $db->fetch($query)) and ($counter < $max))
  {
   ... // HTML code here....

   $counter++;
  }

Что касается вращения, см. Ответ @ Фейдена.

4 голосов
/ 24 октября 2010

Поворот как в случайном порядке, или как следующие 10 элементов?

Большинство СУБД позволяют упорядочивать строки случайным образом:

-- MySQL
SELECT * FROM nk_showcase ORDER BY RAND() LIMIT 10
-- PostgreSQL
SELECT * FROM nk_showcase ORDER BY RANDOM() LIMIT 10

Что будет выбирать 10 случайных строк каждый раз, когда вы обновляете страницу

Если вы хотите показать следующие 10 элементов, вам придется разбить страницу на страницы (и использовать синтаксис LIMIT X OFFSET Y)

0 голосов
/ 24 октября 2010

Вам нужно изменить свой запрос $ select, попробуйте использовать LIMIT на 10, если вам просто нужны 10 первых элементов, или попробуйте также с OFFSET , если вам нужно разбить на страницы результаты.

$select.=" OFFSET $start LIMIT $range;";

Затем вам нужно управлять $ start и $ range переменными, такими как:

$size_page=10;
 if (!$page) {
             $start = 0;
             $page=1;
        }
        else {
            $start = ($page - 1) * $size_page;
        } 

Вы можете заметить, что $ rangeдолжно быть одинаковым значением $ size_page, и вам просто нужно рассчитать начальное значение $ для каждой итерации с учетом # страниц

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...