CleverCode发现在mysql有分页丢失数据的问题。如下面的代码,system_user表有400万行数据,这时候需要把这张表里面的所有的userid取出来。这时候只能分页取,一次取2万。
//系统用户表(400万行的数据)
$systemUserTable = new systemUserTable();
// 每次取20000
$pageSize = 20000;
for($curPage = 1;; $curPage++) {
$sql = "select userid from system_user order by userid asc limit " . (($curPage - 1) * $pageSize) . "," . $pageSize;
//取数据
$rows = $systemUserTable->fetchAll($sql);
// 没有数据了,结束
if (empty($rows)) {
break;
}
// 遍历数据
foreach ( $rows as $key => $val ) {
$userid = $val['userid'];
echo $userid."\r\n";
}
}
7)u6,u7被丢失了。
$systemUserTable = new systemUserTable();
// 每次取20000
$pageSize = 20000;
// 每页最大编号
$pageMaxId = 0;
while ( 1 ) {
$sql = "select userid from system_user where userid > ${pageMaxId} order by userid asc limit " . $pageSize;
//取数据
$rows = $fyHouse->fetchAll($sql);
// 没有数据,结束
if (empty($rows)) {
break;
}
// 遍历数据
foreach ( $rows as $key => $val ) {
$userid = $val['userid'];
// 记录当前最大分页编号
if ($userid > $pageMaxId) {
$pageMaxId = $userid;
}
echo $userid."\r\n";
}
}
3)第二次取,最大偏移量u5,limit 5;则取出(u6,u7,u8,u9,u10)。记录最大的偏移量u10的值。