Как запросить первые 10 строк и следующий запрос времени еще 10 строк из таблицы
У меня более 500 строк в моей таблице базы данных с определенной датой.
Запросить строки с определенной датой.
select * from msgtable where cdate='18/07/2012'
Это возвращает 500 строк.
Как запросить эти 500 строк по 10 строк шаг за шагом.
Запрос Первые 10 строк и показать в браузере, затем запросить следующие 10 строк и показать в браузере?
Ответы
Ответ 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