Разбиение на страницы PHP / MySQL

Я новичок в php и sql, и у меня есть один крошечный вопрос о том, как реализовать sql-запрос, который может:

  • Возьмите, например, 5 записей из БД, вставьте их на 1-ю страницу (1-5)
  • Затем возьмите следующие 5 записей из той же БД и вставьте их на другую страницу (5-10)
    и так далее :)

Спасибо )


person user313216    schedule 22.06.2010    source источник
comment
возможный дубликат разбивки на страницы MySQL без двойных запросов?   -  person OMG Ponies    schedule 22.06.2010


Ответы (3)


SELECT col FROM table LIMIT  0,5; -- First page, rows 1-5
SELECT col FROM table LIMIT  5,5; -- Second page, rows 6-10
SELECT col FROM table LIMIT 10,5; -- Third page, rows 11-15

Прочтите раздел LIMIT в справочной системе MySQL SELECT. Если вы хотите отобразить общее количество доступных строк, вы можете выполнить дополнительный подсчет или использовать ROW_COUNT.

person Konerak    schedule 22.06.2010

Есть несколько способов сделать это, я думаю, что самый быстрый результат - следующий:

$ItemsPerQuery = 5;
$CurrentPage = 0; //here you can add the current site through $_GET array or other ways, but don't forget to use mysql_real_escape_string(), because of mysql injection 

$Query = mysql_query("SELECT * FROM table LIMIT ".($ItemsPerQuery*$CurrentPage).",".$ItemsPerQuery);

while($row = mysql_fetch_assoc($query))
{
    echo $row['column_name'];
}

Что следует использовать:

person therufa    schedule 22.06.2010
comment
Ага, ну спасибо) У меня в голове что-то вроде этого, но понятия не имел, как это реализовать должным образом. - person user313216; 22.06.2010
comment
Это неправильно, на странице 1 не будут отображаться первые 5 записей, начальное ограничение - 1 * 5, должно быть 0 и в целом должно быть ($ ItemsPerQuery * $ CurrentPage - $ ItemsPerQuery) - person cypher; 22.06.2010
comment
эээ, правда :) $CurrentPage должен быть 0, потому что 0 * 5 = 0. Извините - person therufa; 22.06.2010
comment
И, пожалуйста, если переменные поступают из $ _GET или любого другого пользовательского ввода, помните о SQL-инъекции. Оден, если вы хотите строить SQL-запросы с использованием конкатенации строк, можете ли вы использовать real_escape_string или связать с ней? - person Konerak; 22.06.2010

Если ваш запрос не возвращает недопустимо большое количество результатов, рассмотрите возможность использования JQuery для его постраничного вывода с помощью функции Tablesorter. Он принимает правильно отформатированную HTML-таблицу и страницы, сортировку и т. Д. На лету ... Нет необходимости в дополнительных переменных запроса, если вы не хотите. Это НАСТОЛЬКО проще, чем полноценный маршрут разбиения на страницы PHP, и намного быстрее для пользователя.

Мой личный любимый пример здесь: http://datatables.net/

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

person bpeterson76    schedule 22.06.2010