MySQL — как разбить на страницы?

#mysql

#mysql

Вопрос:

Учитывая некоторые записи, как запросить следующее:

  1. Первые 10 записей, следующие 10 записей и т.д.?
  2. Последние 10 записей, от второй до последней 10 записей и т.д.?

Ответ №1:

LIMIT это то, что вам нужно http://dev.mysql.com/doc/refman/5.1/en/select.html

Первые 10:

 SELECT * FROM TABLE LIMIT 10;
  

Второй 10:

 SELECT * FROM TABLE LIMIT 10,10;
  

Третий 10:

 SELECT * FROM TABLE LIMIT 20,10;
  

«Последние 10» имеют значение только при упорядочивании строк. В этом случае вы меняете порядок и берете первые 10, используя первый оператор, указанный выше. Если вы хотите «предпоследний 10», то вы делаете то же самое с обратным порядком, а затем используете второй оператор сверху.

Надеюсь, это поможет!

Комментарии:

1. Что, если я хочу сохранить порядок, когда получу последние 10?

2. Простой способ — просто перевернуть порядок обратно, как только они у вас есть, поскольку их всего 10, что довольно дешево сделать. Если вы действительно хотите сделать это в SQL, вам нужно знать общее количество строк, чтобы вы могли вычесть из этого 10 и использовать его в качестве смещения LIMIT (total-10),10

3. Как мне включить общее количество строк в ПРЕДЕЛЬНУЮ часть?

4. Сначала вы получите эту информацию извне этого запроса. Итак, запустите COUNT() для этой таблицы, получите результат в одну строку. Сохраните информацию в переменной, вычтите 10 из числа, которое у вас есть в этой переменной, а затем сгенерируйте новый запрос и выполните его.

5. Вроде того. На самом деле это не стоит такой сложности. Последние 5 строк: gist.github.com/1306594

Ответ №2:

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

Примерами могут быть:

 /** First 10 records **/
SELECT * FROM `table` ORDER BY SomeColumn LIMIT 10; 
SELECT * FROM `table` ORDER BY SomeColumn LIMIT 0,10; 
SELECT * FROM `table` ORDER BY SomeColumn LIMIT 10 OFFSET 0; 

/** The records 11-20 **/
SELECT * FROM `table` ORDER BY SomeColumn LIMIT 10, 10; 

/** The records 101-110 **/
SELECT * FROM `table` ORDER BY SomeColumn LIMIT 100, 10; 
SELECT * FROM `table` ORDER BY SomeColumn LIMIT 10 OFFSET 100; 

/** The last 10 records (in reverse order than previous queries) **/
SELECT * FROM `table` ORDER BY SomeColumn DESC LIMIT 10; 
SELECT * FROM `table` ORDER BY SomeColumn DESC LIMIT 10 OFFSET 10; 
  

Комментарии:

1. Ограничение 10 100 займет 100 записей, начиная с позиции 10. Не записывает 10-20.

2. Иногда быстрый ввод меня раздражает, исправлено. Спасибо.

3. Все еще неправильно.. теперь вы получаете записи 100-110. «ВЫБЕРИТЕ * ИЗ table LIMIT 10, 10; /** Записи 10-20 **/»

Ответ №3:

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

  • Первые 10 записей

     ... LIMIT 10
      
  • Следующие 10 записей

     ... LIMIT 10, 10
      

Используйте это в сочетании с COUNT() запросом в вашем приложении, чтобы найти общее количество строк. Затем вы можете использовать это число и количество желаемых строк на странице для построения вашей разбивки на страницы.

Комментарии:

1. Можете ли вы показать, как я бы включил COUNT() при попытке получить последние 10 и т. Д.?

Ответ №4:

Я полагаю, что вы можете использовать LIMIT и OFFSET и ORDER BY для достижения этой цели. http://dev.mysql.com/doc/refman/5.0/en/select.html

Комментарии:

1. Я хочу поддерживать порядок записей при получении последних 10, от второго до последнего 10 и т.д.

Ответ №5:

одним из решений может быть использование limit 0,9 в вашем запросе

выберите * из таблицы, где id < 50 limit 0,9

затем вы добавляете несколько кнопок, увеличивающих / уменьшающих ваш лимит

Ответ №6:

PHP-код :

 $limit = 10;
$page = 1;


$from = ( $page - 1 ) * $limit;
$SQL = "SELECT * FROM `table` LIMIT $from,$limit";