Как я могу выбрать строки в MySQL, начиная с заданного номера строки? - PullRequest
34 голосов
/ 10 августа 2009

Скажем, у меня есть 50 строк в таблице MySQL. Я хочу выбрать первые десять (LIMIT 10), но затем я хочу иметь возможность выбрать следующие 10 на другой странице.

Итак, как мне начать выбор после строки 10?

Обновлен запрос:

mysql_query("
    SELECT * FROM `picdb`
    WHERE `username` = '$username'
    ORDER BY `picid` DESC
    LIMIT '$start','$count'
")

Ответы [ 4 ]

64 голосов
/ 10 августа 2009

Я рекомендую работать, получив первую страницу, используя:

LIMIT 0, 10

затем для второй страницы

LIMIT 10, 10

тогда

LIMIT 20, 10

для третьей страницы и т. Д.

28 голосов
/ 10 августа 2009
LIMIT 10

LIMIT 10 OFFSET 10

Из документов MySQL 5.1 в SELECT синтаксис :

Для совместимости с PostgreSQL, MySQL также поддерживает LIMIT row_count Синтаксис смещения OFFSET.

1 голос
/ 23 июля 2014

Этот вопрос старый, но я просто хочу добавить код, который не является жестко закодированным, ответ хаос означает, что вам придется жестко кодировать свои сценарии (оператор Select). Вы можете достичь тех же результатов, получив имя файла и затем выбрав данные из базы данных на основе текущей страницы, без жесткого программирования вашего оператора выбора. сначала получить текущую страницу

$page = basename($_SERVER['SCRIPT_FILENAME']);
$page_counter = rtrim($page, ".php");
//setting your limit
$start = 0;
$limit = 10;
//if current page is not index.php then $start = ($limit * page_counter); 
// e.g if current page is 1.php then $start = ($limit * 1) = 10
//if current page is 2.php then $start = ($limit * 2) = 20
if ($page !== 'index.php') {

 $start = ($limit * $page_counter);
}
//getting row count
$ROW_COUNT = $db->query('SELECT * from tableName')->rowCount();

//getting number of rows left in the table
$rows_left = ("SELECT * FROM tableName limit ?,?");
$rows_left = $db->prepare($rows_left);
$rows_left->execute(array($start,$ROW_COUNT));
$rows = $rows_left->fetchAll(PDO::FETCH_ASSOC);

$number_rows = 0;
foreach ($rows as $r) {
 $number_rows = $number_rows + 1;
 }
 //if number of rows left in the table is less than 10 then $limit = the number of rows left
 if ($number_rows < 10) {
 $limit = $number_rows;
 }

 //getting all rows
            $getRows = "SELECT * FROM tableName limit ?,?";
            $getRows = $db->prepare($getRows);
            $getRows->execute(array($start , $limit));
            $getRows = $getRows->fetchAll(PDO::FETCH_ASSOC);
0 голосов
/ 11 апреля 2017
select * from 'table_name' 
ORDER BY 'column_id 'DESC 
LIMIT 0,10;

select * from 'table_name' 
ORDER BY 'column_id' DESC 
LIMIT 10,10;

select * from 'table_name' 
ORDER BY 'column_id' DESC
LIMIT 20,10;

и продолжайте до нужных вам чисел.

...