Подтвердить что ты не робот

Как запросить первые 10 строк и следующий запрос времени еще 10 строк из таблицы

У меня более 500 строк в моей таблице базы данных с определенной датой.

Запросить строки с определенной датой.

select * from msgtable where cdate='18/07/2012'

Это возвращает 500 строк.

Как запросить эти 500 строк по 10 строк шаг за шагом. Запрос Первые 10 строк и показать в браузере, затем запросить следующие 10 строк и показать в браузере?

4b9b3361

Ответ 1

Просто используйте предложение LIMIT.

SELECT * FROM `msgtable` WHERE `cdate`='18/07/2012' LIMIT 10

И со следующего вызова вы можете сделать так:

SELECT * FROM `msgtable` WHERE `cdate`='18/07/2012' LIMIT 10 OFFSET 10

Дополнительная информация о OFFSET и LIMIT на LIMIT и OFFSET.

Ответ 2

LIMIT limit OFFSET offset будет работать.

Но вам нужно стабильное ORDER BY предложение, или значения могут быть упорядочены по-разному для следующего вызова (после любой записи в таблице, например).

SELECT *
FROM   msgtable
WHERE  cdate = '2012-07-18'
ORDER  BY msgtable_id  -- or whatever is stable 
LIMIT  10
OFFSET 50;  -- to skip to page 6

Используйте стиль даты, соответствующий стандарту (ISO 8601 в моем примере), который работает независимо от ваших настроек локали.

Пейджинг по-прежнему будет меняться, если задействованные строки будут вставлены или удалены или изменены в соответствующих столбцах. Это должно быть.

Чтобы избежать этого сдвига или для лучшей производительности с большими таблицами используйте умные стратегии поискового вызова:

Ответ 3

SET @rownum = 0; 
SELECT sub.*, sub.rank as Rank
FROM
(
   SELECT *,  (@rownum := @rownum + 1) as rank
   FROM msgtable 
   WHERE cdate = '18/07/2012'
) sub
WHERE rank BETWEEN ((@PageNum - 1) * @PageSize + 1)
  AND (@PageNum * @PageSize)

Каждый раз, когда вы передаете параметры @PageNum и @PageSize, чтобы получить нужную вам страницу. Например, первые 10 строк будут @PageNum = 1 and @PageSize = 10

Ответ 4

для первых 10 строк...

SELECT * FROM msgtable WHERE cdate='18/07/2012' LIMIT 0,10

для следующих 10 строк

SELECT * FROM msgtable WHERE cdate='18/07/2012' LIMIT 10,10

Ответ 5

Вы можете использовать postgresql Cursors

BEGIN;
DECLARE C CURSOR FOR where * FROM msgtable where cdate='18/07/2012';

Затем используйте

FETCH 10 FROM C;

чтобы получить 10 строк.

финский с

COMMIT;

чтобы закрыть курсор.

Но если вам нужно сделать запрос в разных процессах, LIMIT и OFFSET, как это предложил @Praveen Kumar, лучше

Ответ 6

Ok. Поэтому я думаю, вам просто нужно реализовать разбиение на страницы.

$perPage = 10;

$pageNo = $_GET['page'];

Теперь найдите общие строки в базе данных.

$totalRows = Get By applying sql query;

$pages = ceil($totalRows/$perPage);    

$offset = ($pageNo - 1) * $perPage + 1

$sql = "SELECT * FROM msgtable WHERE cdate='18/07/2012' LIMIT ".$offset." ,".$perPage