Постраничный вывод из MySQL
Итак, вы много раз видели, как дынные выводятся постранично и вы всегда хотели сделать так на своем сайте. Как это сделать с файлом я уже описывал. Сегодня я расскажу как сделать постраничный вывод из MySQL.
Для начала немного теории. Что надо сделать? Сначала, надо проверить выбрана ли страница просмотра. Потом надо подсчитать откуда выводить записи. Делается это просто: текущую страницу умножаем на количество записей на страницу. Наконец, надо сделать SQL-запрос к базе данных и вывести результат. И в конце концов написать нивигацию.
Приступим. Выполните SQL-запрос:
CREATE TABLE tbl_books (
book_id int(11) NOT NULL auto_increment,
book_name varchar(50) NOT NULL default »,
book_cash float NOT NULL default ’0′,
PRIMARY KEY (book_id)
) TYPE=MyISAM;
INSERT INTO tbl_books VALUES (1, ‘Книга номер 1′, ’2′);
INSERT INTO tbl_books VALUES (2, ‘Книга номер 2′, ’3′);
INSERT INTO tbl_books VALUES (3, ‘Книга номер 3′, ’4′);
INSERT INTO tbl_books VALUES (4, ‘Книга номер 4′, ’5′);
INSERT INTO tbl_books VALUES (5, ‘Книга номер 5′, ’6′);
INSERT INTO tbl_books VALUES (6, ‘Книга номер 6′, ’7′);
INSERT INTO tbl_books VALUES (7, ‘Книга номер 7′, ’8′);
INSERT INTO tbl_books VALUES (8, ‘Книга номер 8′, ’9′);
INSERT INTO tbl_books VALUES (9, ‘Книга номер 9′, ’10′);
INSERT INTO tbl_books VALUES (10, ‘Книга номер 10′, ’11′);
INSERT INTO tbl_books VALUES (11, ‘Книга номер 11′, ’12′);
INSERT INTO tbl_books VALUES (12, ‘Книга номер 12′, ’13′);
INSERT INTO tbl_books VALUES (13, ‘Книга номер 13′, ’14′);
INSERT INTO tbl_books VALUES (14, ‘Книга номер 14′, ’15′);
INSERT INTO tbl_books VALUES (15, ‘Книга номер 15′, ’16′);
Я предлагаю все оформить в виде функций обработчиков. Создадим функцию page(), которая обрабатывает данные о запрошенном номере страницы:
function page()
{
if(empty($_GET["page"])){
$page = 0;
} else {
if(!is_numeric($_GET["page"])) die("Неправильный формат номера страницы!");
$page = $_GET["page"];
}
return $page;
}
Что она делает? Проверяет выбрана ли страница и если в ней присутствуют буквы, то выводит сообщение об ошибке. Далее сделаем SQL-запрос:
function sql_query($onpage, $page, $table)
{
$begin = $page*$onpage; // откуда начинать
$sql = "SELECT * FROM ".$table." LIMIT ".$begin.", ".$onpage;
$result = mysql_query($sql) or die(mysql_error());
return $result;
}
Функция навигации:
function navigation($onpage, $page, $table)
{
$return = null;
$count = mysql_query("SELECT COUNT(*) FROM tbl_books") or die(mysql_error());
$count = mysql_fetch_array($count);
$count = $count[0];
$pages = $count/$onpage;
if($page!==0){
$prev = "<«;
} else {
$prev = «<";
}
if($page
} else {
$next = «>»;
}
for($i=0;$i<$pages;$i++)
{
if($i==$page){
$return.="[".($i+1)."]";
} else {
$return.="[".($i+1)."]«;
}
}
return $prev.$return.$next;
}
С функциями покончили! Как ими пользоваться?
$onpage = 4; // записей на страницу
$table = «tbl_books»; // из какой таблицы
mysql_connect(«localhost», «root», «pass») or die(mysql_error()); // коннект к БД
mysql_select_db(«test»); // выбор БД
$page = page(); // определяем страницу
$result = sql_query($onpage, $page, $table); // sql — запрос
while($data = mysql_fetch_array($result)) // цикл вывода
{
// шаблон вывода нужно изменить
// $data["название_поля"] — содержание поля
echo $data["book_id"].» «.$data["book_name"].»
«;
echo $data["book_cash"].»$
«;
}
$navigation = navigation($onpage, $page, $table); // определим навигацию
echo $navigation; // выведем ее
mysql_close(); // отключение от БД
?>
Февраль
23,
2008
— Filed under: MySQL
Метки: MySQL, БД, Постраничный вывод
