Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql分页-避免丢失或复制数据到客户端_Php_Mysql_Sql_Pagination - Fatal编程技术网

Php mysql分页-避免丢失或复制数据到客户端

Php mysql分页-避免丢失或复制数据到客户端,php,mysql,sql,pagination,Php,Mysql,Sql,Pagination,我在mySql中有一个这样的表 CREATE TABLE `usermst` ( `userid` smallint(5) unsigned NOT NULL, `username` varchar(45) NOT NULL, `insdate` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 有如下数据 insert into usermst(us

我在mySql中有一个这样的表

CREATE TABLE `usermst` (
  `userid` smallint(5) unsigned NOT NULL,
  `username` varchar(45) NOT NULL,
  `insdate` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
有如下数据

insert into usermst(userid, username)
values (1, "user 1"),
       (2, "user 2"),
       (3, "user 3"),
       (4, "user 4"),
       (5, "user 5"),
       (6, "user 6"),
       (7, "user 7"),
       (8, "user 8"),
       (9, "user 9"),
       (10, "user 10");
如果我查询第1页的4条记录分页,它的工作很好

select * from usermst order by insdate desc, userid desc limit 0,4;
输出:

userid  username insdate
10      user 10  2016-03-08 12:32:04.239335
9       user 9   2016-03-08 12:32:04.239335
8       user 8   2016-03-08 12:32:04.239335
7       user 7   2016-03-08 12:32:04.239335
userid  username insdate
6       user 6   2016-03-08 12:32:04.239335
5       user 5   2016-03-08 12:32:04.239335
4       user 4   2016-03-08 12:32:04.239335
3       user 3   2016-03-08 12:32:04.239335
请求第二页,带有以下查询

select * from usermst order by insdate desc, userid desc limit 4,4;
输出:

userid  username insdate
10      user 10  2016-03-08 12:32:04.239335
9       user 9   2016-03-08 12:32:04.239335
8       user 8   2016-03-08 12:32:04.239335
7       user 7   2016-03-08 12:32:04.239335
userid  username insdate
6       user 6   2016-03-08 12:32:04.239335
5       user 5   2016-03-08 12:32:04.239335
4       user 4   2016-03-08 12:32:04.239335
3       user 3   2016-03-08 12:32:04.239335
但,若以某种方式删除了第1页的记录,则客户端的数据将丢失。或根据我的查询在第1页中插入的记录,将在客户端获取重复数据。
如何防止此错误?

我将使用的方法是将分页基于排序列值,但仅当遍历页面的“下一页”/“上一页”按钮时。当希望导航到特定页码时,仍然必须使用您现有的方法,但我认为您仅描述的问题实际上是使用下一页/上一页按钮导航时的问题

对于每个“下一页”,获取“insdate”小于上一页获取中最后一个“insdate”的所有行

第一页:

SELECT * FROM usermst ORDER BY insdate DESC, userid DESC LIMIT 0,4;
SELECT @prevInsDate := insdate, @prevUserId := userid FROM usermst 
    ORDER BY insdate DESC, userid DESC LIMIT 3,1;
下一页:

SELECT * FROM usermst 
WHERE insdate <= @prevInsDate AND userid < @prevUserId
ORDER BY insdate DESC, userid DESC LIMIT 0,4;

SELECT @prevInsDate := insdate, @prevUserId := userid FROM usermst 
    ORDER BY insdate DESC, userid DESC LIMIT 7,1;

其中@prevInsDate和@prevUserId已声明为变量。

我将使用的方法是将分页基于排序列值,但仅当遍历页面的“下一页”/“上一页”按钮时。当希望导航到特定页码时,仍然必须使用您现有的方法,但我认为您仅描述的问题实际上是使用下一页/上一页按钮导航时的问题

对于每个“下一页”,获取“insdate”小于上一页获取中最后一个“insdate”的所有行

第一页:

SELECT * FROM usermst ORDER BY insdate DESC, userid DESC LIMIT 0,4;
SELECT @prevInsDate := insdate, @prevUserId := userid FROM usermst 
    ORDER BY insdate DESC, userid DESC LIMIT 3,1;
下一页:

SELECT * FROM usermst 
WHERE insdate <= @prevInsDate AND userid < @prevUserId
ORDER BY insdate DESC, userid DESC LIMIT 0,4;

SELECT @prevInsDate := insdate, @prevUserId := userid FROM usermst 
    ORDER BY insdate DESC, userid DESC LIMIT 7,1;

其中@prevInsDate和@prevUserId被声明为变量。

我不太明白问题所在,为什么会丢失数据,为什么会有重复数据?问题不清楚如果数据不再存在,它应该不可用于cllient。但是,如果您想避免此错误,可以将整个数据提取到php数组中并对这些数据进行分页,而不是进行新的查询。hi@xpy和vigikaran,如果userid 9在第二次查询启动之前删除,会发生什么情况。关于插入,问题是,是否要在结果集中包含这些新记录?关于删除,问题是,在某些页面上显示较少的记录是否至关重要?最后一个问题,如果点击prev->next或next->prev,N页的结果集会改变吗?我真的不明白这个问题,为什么数据会丢失,为什么会有重复?问题不清楚如果数据不再存在,它应该不适用于cllient。但是,如果您想避免此错误,可以将整个数据提取到php数组中并对这些数据进行分页,而不是进行新的查询。hi@xpy和vigikaran,如果userid 9在第二次查询启动之前删除,会发生什么情况。关于插入,问题是,是否要在结果集中包含这些新记录?关于删除,问题是,在某些页面上显示较少的记录是否至关重要?最后一个问题,如果单击“上一页->下一页”或“下一页->上一页”,N页的结果集会发生变化,这样可以吗?