怎么快速根据某一条记录找该记录所在页码?

wrean2013 发布于 2013/06/20 15:50
阅读 318
收藏 0
有1000条记录,A记录是1000条记录中的一条,1000条记录分50页,每页20条记录,怎么快速计算出A记录在那一页?假如这1000条记录有序
加载中
0
BLUE-魏晓峰
BLUE-魏晓峰
嵌套Sql可以解决,先查所有记录并加行号,再查A记录的行号,页号也出来了。不过记录很多的话,性能估计是个问题
BLUE-魏晓峰
BLUE-魏晓峰
@Wrean 如果我们的方案是一致的,把我的回复设置成最佳答案啊,这样我们两个都会加分
wrean2013
wrean2013
你这说到点子上了,我已搞定了,基本就是按照这个思路,先查到row_number(),根据row_number()查到页码,再加载这个页码内容。
0
moyiguke
moyiguke

页码?页码也是根据每页显示的记录来显示的。

找文本中的记录就用kmp算法。数据库就like。

0
wrean2013
wrean2013

引用来自“moyiguke”的答案

页码?页码也是根据每页显示的记录来显示的。

找文本中的记录就用kmp算法。数据库就like。

难道遍历每页的内容?如果记录在某一页就返回此页?这不太慢了吗而且开销非常大
0
王瑞平
王瑞平
摊上大事了
王瑞平
王瑞平
回复 @Wrean : 这个数据量一大根本就不现实 不查全表根本可能得不到结果,这种想法要不得
wrean2013
wrean2013
什么大事?
0
陨落人间
陨落人间

如果是连续数据,可用分页的原理

<?php

$Total =1000;
$PageSize =20;
$CurrentRecord =845;
echo GetPage($Total, $PageSize, $CurrentRecord);

function GetPage($Total, $PageSize, $CurrentRecord)
{
	if ( $CurrentRecord <= $Total )
	{
		if($CurrentRecord <= $PageSize )
		{
			$page =1 ;
		}
		if ($CurrentRecord % $PageSize )
		{
			$page = (int)($CurrentRecord / $PageSize) + 1;
		}else{
			$page = $CurrentRecord / $PageSize;
		}
		return $page ;
	}
}
陨落人间
陨落人间
845只是个参考,你可以替换成A
wrean2013
wrean2013
这个当前记录不是845这么个序列数。
0
moyiguke
moyiguke

遍历每一页是必须的。最坏情况下,要找的记录就是最后一条记录。某一条记录找到之后,还是要找后面的内容中是否有符合的。

考虑到时间和空间开销,可以记录下当次搜索到文件中,格式可以自己定义。下一次搜索的时候先从记录的文件中找,如果找到直接返回,找不到就遍历文件。

现在电脑的性能执行这种搜索是很快的。内存开销采取延迟加载也不用担心。

moyiguke
moyiguke
原来是数据库数据。我还以为是文本类型的数据。 数据量大的话,可以建临时表之类的,临时表只需包含主键之类的关联字段,不必包含其他字段。将数据导入到临时表。遍历的时候先找到a记录主键(或者其他唯一字段),然后用这个主键与临时表关联。
wrean2013
wrean2013
你这方法肯定不行,如果不是1000条,而是1000W,你也这么遍历吗?
返回顶部
顶部