Выбор из базы данных со смещениями - PullRequest
0 голосов
/ 27 января 2011
 <?php
      switch ($page)
        {
        case 1:

            $query = $this->db->get_where('ao', array('banned' => '0'), 28, 0);
            break;
        case 2:
            $query = $this->db->get_where('ao', array('banned' => '0'), 56, 29);
            break;
        case 3:
            $query = $this->db->get_where('ao', array('banned' => '0'), 84, 57);
            break;
        case 4:
            $query = $this->db->get_where('ao', array('banned' => '0'), 112, 85);
            break;
        case 5:
            $query = $this->db->get_where('ao', array('banned' => '0'), 140, 113);
            break;
        case 6:
            $query = $this->db->get_where('ao', array('banned' => '0'), 168, 141);
            break;
        case 7:
            $query = $this->db->get_where('ao', array('banned' => '0'), 196, 169);
             break;
        case 8:
            $query = $this->db->get_where('ao', array('banned' => '0'), 224, 197);
             break;
        case 9:
            $query = $this->db->get_where('ao', array('banned' => '0'), 252, 225);
             break;
        case 10:
            $query = $this->db->get_where('ao', array('banned' => '0'), 280, 253);
            break;
        case 11:
            $query = $this->db->get_where('ao', array('banned' => '0'), 308, 281);
            break;
        case 12:
            $query = $this->db->get_where('ao', array('banned' => '0'), 336, 309);
            break;
        case 13:
            $query = $this->db->get_where('ao', array('banned' => '0'), 364, 337);
            break;
        case 14:
            $query = $this->db->get_where('ao', array('banned' => '0'), 392, 365);
            break;
        case 15:
            $query = $this->db->get_where('ao', array('banned' => '0'), 420, 393);
            break;                  
        default:
            $query = $this->db->get_where('ao', array('banned' => '0'), 28, 0);

}

?>

Это то, чем я сейчас занимаюсь. Есть ли лучший способ сделать это? Каждый случай - это страница, и я звоню по ней со страницы / $ num

Как бы я получил 28 НОВЕЙШИХ записей от того же, что я пытаюсь достичь выше?


Обновление от Роберта Питта

  • $page = 2; //page 2
  • $limit = 30; //per page
  • $offset = ($page - 1 * $offset); //30

Затем вы запрашиваете свою базу данных так:

SELECT * FROM table LIMIT $offset,$limit

Ответы [ 2 ]

1 голос
/ 27 января 2011

Вы можете использовать только два запроса для неограниченного количества страниц:

<?php
    switch($page) {
       case 1:
          $query = $this->db->get_where('ao', array('banned' => '0'), 28, 0);
          break;
       default:
          $query = $this->db->get_where('ao', array('banned' => '0'), 28 * (int)$page, 28 * (int)$page - 27);
          break;
    }
?>

При желании вы можете сохранить размер страницы в переменной и использовать его вместо жесткого кодирования:

<?php
    $ps = 28; // page size
    switch($page) {
       case 1:
          $query = $this->db->get_where('ao', array('banned' => '0'), $ps, 0);
          break;
       default:
          $query = $this->db->get_where('ao', array('banned' => '0'), $ps * (int)$page, $ps * (int)$page - ($ps - 1));
          break;
    }
?>

Таким образом, вы можете изменить размер страницы, изменив одну переменную, вместо того, чтобы выполнять поиск / замену во всем коде.

0 голосов
/ 27 января 2011

может быть, это поможет:

$sqltorun="SET @rownum = 0;
SET @startRow = ".$StartRow."; # your $page
SET @maxRows = ".$MaxRows."; # limit. how much rows per page
SELECT * FROM (SELECT @rownum:=@rownum+1 as rownum, t.* FROM (SELECT @rownum:=0) r, YOURTABLE t where banned=>0 order by SOMETHING OR DONT ORDERBY) t WHERE rownum BETWEEN @startRow and @startRow + @maxRows and rownum!=@startRow";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...