给哈斯老师做词典搜索时,关于数据的显示方式,用id值出错的思考
给哈斯老师做了一个蒙文搜索站,提供蒙文的搜索和后台的一些管理功 能,就是增删改查,虽然这种东西做了无数遍,但每一次都能发现一些自己的问题,也能更熟练的,更深入理解编程的思想,每个操作更加灵活,机智,便于扩展,好开发,这一次也是有很多收获,比如1.数据量比较大,22万条,虽然检索的时候很慢,2.22万条数据是不能一次都提取出来的,PHP有内存限制,会导致内存溢出,这个问题我以前一直没有注意,3. 在做分页处理的时候,我是使用自己写的接口,一开始挺好,后来就出现了问题,使用id作为数据的提取特征是一个很大的问题,id是不断变化的,刚刚想到一个好的方法,就是直接用thinkphp提供的分页接口,一切都OK,效率上去了,问题也解决了,还好写,不会出错,这就是我的一点收获,要记到笔记里,作为一丝丝经验了。。。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
/** * 使用id来获取值的确会错,刚刚出现了一个bug,就是222506以后的所有数据在本页面中不显示,是因为我删除了一个数据,所以 * id的连续性出现中断,导致if判断里直接break了, * * 这里的这个问题我不想重新在用别的方法去写一遍了,就用最简单的方法,挑选够10条数据就OK,不去判断什么,这样肯定是有问题的 * ,而且以后会很严重,那就是如果删除的数据多了,用page来获取目标开始id就失效了,页面也就链接不上了,但目前先这样吧, * * 更好的解决方法有很多,1,不删除数据,设置一个state字段,修改字段的值就行,但是这样使用page获取目标开始id也会出错 * 2. 不使用id来作为目标开始数,而用确切的位置来定位,但用什么定位我也没有想到什么好的方法,以后遇到不可避免的开发时,再去研究吧 */ for ($i=$page*10-10+1;$i<=$page*10;$i++){ /** * 如果数据的条数发生改变,这种方法就会出现bug,所以用下面的判断null比较好一些 * 并且还能用这个来判断页数,确定是不是最后一页 */ // if ($i>222506){ // break; // } $data = D('Cmdic1')->get_Cmdic1Info(array('id'=>$i)); if ($data['id']==''){ continue; } |