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

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

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

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

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

person mrpatg    schedule 10.08.2009    source источник
comment
Попробуйте mysql_query (SELECT * FROM picdb WHERE username = '$username' ORDER BY picid DESC LIMIT $start,$count)   -  person Rufinus    schedule 10.08.2009
comment
Повторно отредактируйте, вы должны настроить обратную связь об ошибках до такой степени, что она скажет вам, что не так с вашим SQL. Вы обнаружите, что у вас есть синтаксическая ошибка, потому что ваше предложение LIMIT находится перед вашим предложением ORDER BY.   -  person chaos    schedule 10.08.2009


Ответы (4)


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

LIMIT 0, 10

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

LIMIT 10, 10

тогда

LIMIT 20, 10

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

person chaos    schedule 10.08.2009
comment
извините, что спрашиваю, но мне все время было интересно, как это работает? у меня это работает, но я не могу его понять, означает ли это получение начиная с 21 максимум с 10 строками? - person engma; 02.10.2012
comment
Я некоторое время выполнял поиск, и начальный номер зависит от движка, когда я тестировал innodb, он начинался с 0, а не 1, поэтому вам следует проверить настройки вашего движка. - person engma; 03.10.2012
comment
@ Developer106: На самом деле, я ни при каких обстоятельствах не могу воспроизвести индекс, начинающийся с 1, поэтому я не знаю, как появилась предыдущая версия этого ответа. - person chaos; 03.10.2012

LIMIT 10

LIMIT 10 OFFSET 10

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

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

person Karl Voigtland    schedule 10.08.2009
comment
Это действительно? Я никогда этого не видел. - person mpen; 10.08.2009
comment
Я не уверен, насколько широко распространен OFFSET; но это немного понятнее, так как вам не нужно помнить, какое число является пределом, а какое смещением. - person Karl Voigtland; 10.08.2009

Этот вопрос старый, но я просто хочу добавить код, который не жестко закодирован, ответ, который дал хаос, означает, что вам придется жестко закодировать свои сценарии (оператор 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);
person TenTen Peter    schedule 23.07.2014

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;

и продолжайте до тех чисел, которые вы хотите.

person Sachin Prasad    schedule 11.04.2017
comment
Добро пожаловать в stackoverflow! Это довольно старый вопрос с высокой посещаемостью. Добавляет ли ваш ответ что-то, чего нет в других, уже установленных ответах? Вообще говоря, лучше, если вы сможете отредактировать существующие, принятые ответы, чтобы отразить любые необходимые изменения, а не полностью новый ответ, так как большинство пользователей не будут прокручивать так далеко вниз (где появится ваш ответ) будет ответ. - person Zachary Craig; 11.04.2017