- 记录索引: 记录在表中的位置,从0开始(与主键无关)
- 偏移量: 每页显示的起始位置
- 显示数量: 每页默认的显示数量
# 为了测试方便,我们先增加一些数据
INSERT INTO `user` VALUES (2, '13011113333', '洪七公', 'e10adc3949ba59abbe56e057f20f883e', 74, 1, 1, 1554282409);
INSERT INTO `user` VALUES (3, '18722223333', '黄蓉', 'e10adc3949ba59abbe56e057f20f883e', 17, 2, 1, 1554282409);
INSERT INTO `user` VALUES (4, '18722224444', '郭靖', 'e10adc3949ba59abbe56e057f20f883e', 23, 1, 1, 1554282409);
INSERT INTO `user` VALUES (5, '18722225555', '黄药师', 'e10adc3949ba59abbe56e057f20f883e', 58, 1, 1, 1554282409);
INSERT INTO `user` VALUES (6, '18722226666', '周伯通', 'e10adc3949ba59abbe56e057f20f883e', 53, 1, 1, 1554282409);
INSERT INTO `user` VALUES (7, '18722227777', '杨过', 'e10adc3949ba59abbe56e057f20f883e', 1, 1, 1, 1554282409);
INSERT INTO `user` VALUES (8, '18722228888', '杨康', 'e10adc3949ba59abbe56e057f20f883e', 22, 1, 1, 1554282409);
INSERT INTO `user` VALUES (9, '18722229999', '欧阳锋', 'e10adc3949ba59abbe56e057f20f883e', 60, 1, 1, 1554282409);
INSERT INTO `user` VALUES (10, '18733331111', '丘处机', 'e10adc3949ba59abbe56e057f20f883e', 69, 1, 1, 1554282409);
INSERT INTO `user` VALUES (11, '18733332222', '瑛姑', 'e10adc3949ba59abbe56e057f20f883e', 45, 1, 1, 1554282409);
INSERT INTO `user` VALUES (12, '18733333333', '王重阳', 'e10adc3949ba59abbe56e057f20f883e', 55, 1, 1, 1554282409);
INSERT INTO `user` VALUES (13, '18733334444', '穆念慈', 'e10adc3949ba59abbe56e057f20f883e', 19, 1, 1, 1554282409);
INSERT INTO `user` VALUES (14, '18733335555', '陈玄风', 'e10adc3949ba59abbe56e057f20f883e', 35, 1, 1, 1554282409);
INSERT INTO `user` VALUES (15, '18733336666', '曲灵风', 'e10adc3949ba59abbe56e057f20f883e', 42, 2, 1, 1554282409);
INSERT INTO `user` VALUES (16, '18733337777', '梅超风', 'e10adc3949ba59abbe56e057f20f883e', 32, 1, 1, 1554282409);
LIMIT m OFFSET n
LIMIT m: 每页显示的记录数量
OFFSET n: 从指定的索引n开始显示
SELECT * FROM user;
SELECT * FROM user LIMIT 0,5;
SELECT * FROM user LIMIT 5,5;
SELECT * FROM user LIMIT 5 OFFSET 5;
- offset = num * (page - 1)
- Ajax: (Asynchronous Javascript And XML)异步JavaScript和XML
- Ajax: 是指一种创建交互式网页应用的网页开发技术
- Ajax 是一种用于创建快速动态网页的技术
- Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术
- 通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新
- 这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新
- XMLHttpRequest是一个浏览器接口,使得Javascript可以进行HTTP(S)通信
- 我们最熟悉应用就是创建AJAX对象
- 在不刷新页面的情况下, 从服务器获取数据并渲染到html中
<?php
$pdo = new PDO('mysql:dbname=php', 'root','root');
$stmt = $pdo->prepare('SELECT * FROM `category`');
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo '<pre>' .print_r($result,true);
# index.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>电影分类</title>
</head>
<body>
<button>电影分类</button>
<ul>
</ul>
</body>
<script>
var btn = document.getElementsByTagName('button').item(0);
var request = new XMLHttpRequest();
btn.addEventListener('click', getCate, false);
function getCate(ev) {
request.addEventListener('readystatechange', callBack, false);
request.open('GET', 'get_cate.php', true);
request.send(null);
ev.target.removeEventListener('click', getCate, false);
}
function callBack() {
if (request.readyState === 4) {
var data = JSON.parse(request.responseText);
var ul = document.getElementsByTagName('ul').item(0);
data.forEach(function (index){
var li = document.createElement('li');
li.innerText = index['alias'];
ul.appendChild(li);
});
}
}
</script>
</html>
- COUNT 统计表中记录的一个函数,返回匹配条件的行数
- CEIL 浮点数向上取正
- LEFT 从左开始截取字符串
- CONCAT 将多个字符串连接成一个字符串
<?php
$page = intval($_GET['p'] ?? 1);
$pdo = new PDO('mysql:dbname=php', 'root', 'root');
$num = 5;
$sql = "SELECT CEIL(COUNT(`mov_id`)/{$num}) FROM `movies`";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$pages = $stmt->fetchColumn(0);
$offset = $num * ($page - 1);
$sql = "SELECT `mov_id`,`name`, CONCAT(LEFT(`detail`,20),'...') AS `detail` FROM `movies` LIMIT {$num} OFFSET {$offset} ";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$movies = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode(['pages'=>$pages, 'movies'=>$movies]);
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>最新影视剧介绍</title>
<style>
table {
border-collapse: collapse;
width: 100%;
}
th, td {
border: 1px solid black;
}
thead > tr{
background-color: lightblue;
}
ul, li {
padding: 0;
margin: 5px auto;
list-style: none;
text-align: center;
overflow: hidden;
}
li {
display: inline-block;
width: 30px;
height: 20px;
border: 1px solid black;
margin-left: 3px;
}
li:hover {
background-color: lightblue;
cursor: pointer;
}
.active {
background-color: lightblue;
}
</style>
</head>
<body>
<table>
<caption>最新影视剧介绍</caption>
<thead>
<tr>
<th>序号</th>
<th>片名</th>
<th>简介</th>
</tr>
</thead>
<tbody id>
<!--这里显示影视信息列表-->
<tr>
<td>3</td>
<td>如果可以这样爱</td>
<td>一对已婚男女突然徇情自杀,以为可以结束这...</td>
</tr>
</tbody>
</table>
<ul>
<li class="active">1</li>
<li class="">2</li>
</ul>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>最新影视剧介绍</title>
<style>
table {
border-collapse: collapse;
width: 100%;
}
th, td {
border: 1px solid black;
}
thead > tr{
background-color: lightblue;
}
ul, li {
padding: 0;
margin: 5px auto;
list-style: none;
text-align: center;
overflow: hidden;
}
li {
display: inline-block;
width: 30px;
height: 20px;
border: 1px solid black;
margin-left: 3px;
}
li:hover {
background-color: lightblue;
cursor: pointer;
}
.active {
background-color: lightblue;
}
</style>
</head>
<body>
<table>
<caption>最新影视剧介绍</caption>
<thead>
<tr>
<th>序号</th>
<th>片名</th>
<th>简介</th>
</tr>
</thead>
<tbody id>
<!--这里显示影视信息列表-->
</tbody>
</table>
<ul>
<!--这里翻页-->
</ul>
</body>
</html>
<script>
var tbody = document.getElementsByTagName('tbody').item(0);
var ul = document.getElementsByTagName('ul').item(0);
var p = <?=$_GET['p'] ?? 1?>;
var request = new XMLHttpRequest();
window.addEventListener('load', showData, false);
function showData() {
request.addEventListener('readystatechange', getData, false);
request.open('GET', 'get_movies.php?p='+p, true);
request.send(null);
}
function getData() {
if (request.readyState === 4) {
var obj = JSON.parse(request.responseText);
var pages = obj['pages'];
var movies = obj['movies'];
var str = '';
movies.forEach(function (movie) {
str += '<tr>';
str += '<td>' + movie['mov_id']+ '</td>';
str += '<td>' + movie.name+ '</td>';
str += '<td>' + movie.detail+ '</td>';
str += '</tr>';
});
tbody.innerHTML = str;
for (var i = 1; i <= pages; i++) {
var active = (i === p) ? 'active' : '';
ul.innerHTML += '<li class="'+ active +'">' + i + '</li>';
}
}
}
ul.addEventListener('click', set_page, false);
function set_page(ev) {
console.log(ev.target.innerText);
location.search = '?p=' + ev.target.innerText;
}
</script>