Как я могу выбрать строки в MySQL, начиная с заданного номера строки?


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

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

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

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

4 ответа:

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

LIMIT 0, 10

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

LIMIT 10, 10

Затем

LIMIT 20, 10

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

LIMIT 10

LIMIT 10 OFFSET 10

Из MySQL 5.1 docs on SELECT синтаксис:

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

Этот вопрос стар, но я просто хочу добавить код, который не является жестко закодированным, ответ, который дал хаос, означает, что вам придется жестко закодировать ваши скрипты(оператор Select). вы можете достичь тех же результатов, получив имя файла и затем выбрав данные из базы данных на основе текущей страницы, без жесткого кодирования инструкции 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);
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;

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