1 
                    
                    jjplay      2015-07-26 19:04:53 +08:00 
                    
                    勤能补拙 
                 | 
            
     2 
                    
                    tobyxdd      2015-07-26 19:08:50 +08:00 
                    
                    看是多高级的分页 
                 | 
            
     3 
                    
                    ghostcat      2015-07-26 19:10:58 +08:00 
                    
                    我一般找现成的代码……读别人的代码学习 
                 | 
            
     4 
                    
                    qwe321      2015-07-26 19:14:01 +08:00 
                    
                    我写的分页代码也是很鸡肋 
                 | 
            
     5 
                    
                    qw7692336      2015-07-26 19:14:57 +08:00 via Android 
                    
                    框架自动完成的分页 
                 | 
            
     6 
                    
                    luban      2015-07-26 19:16:27 +08:00 
                    
                    手两天写不好太正常 
                 | 
            
     7 
                    
                    Wangxf      2015-07-26 19:17:25 +08:00 
                    
                    确实天赋太差,努力做一个好的码农吧,慢慢来吧,也许是某个环节点知识点没疏通 
                 | 
            
     8 
                    
                    learnshare      2015-07-26 19:29:03 +08:00 
                    
                    多写多积累 
                 | 
            
     9 
                    
                    Syec      2015-07-26 19:35:31 +08:00 
                    
                    多看看别人的代码 
                 | 
            
     10 
                    
                    htfy96      2015-07-26 19:39:08 +08:00 
                    
                    到底是哪个分页…… 
                 | 
            
     11 
                    
                    br00k      2015-07-26 19:41:54 +08:00 
                    
                    多高级的分页? 
                 | 
            
     12 
                    
                    sneezry      2015-07-26 19:44:34 +08:00 via iPhone    一般的分页的套路基本是固定的,看看大家都是怎么写的记住就行了,遇到高级,谁都不可能写得顺风顺水的,别没事就质疑自己能力,这世界上的天才远没有你想的那么多,大牛也多是写的多了经历的多了。 
                 | 
            
     13 
                    
                    likai      2015-07-26 19:50:39 +08:00 
                    
                    玩PHP我最怕的就是分页和时间转换了 
                 | 
            
     14 
                    
                    anubiskong      2015-07-26 19:57:12 +08:00 
                    
                    小事情比你想的复杂很多. 
                不信你写个登陆注册  | 
            
     15 
                    
                    loading      2015-07-26 20:15:12 +08:00 via Android 
                    
                    分页不就是 sql 需要看下例子吗? 
                 | 
            
     16 
                    
                    darkmatter   OP @tobyxdd 也就是一般的分页。 
                 | 
            
     17 
                    
                    darkmatter   OP @luban 我怎么觉得很不正常。 
                 | 
            
     18 
                    
                    darkmatter   OP @Wangxf 从别的行业转来,想做个程序员。 
                 | 
            
     19 
                    
                    wohenyingyu01      2015-07-26 20:19:23 +08:00 
                    
                    我也是一个程序员,但是我听不懂什么叫分页 
                 | 
            
     20 
                    
                    breeswish      2015-07-26 20:22:42 +08:00 
                    
                    pagination? paging? … 
                说来生成 pagination 的 上一页,下一页,第一页,最后一页,前几页,后几页…确实要写不少东西  | 
            
     22 
                    
                    lincanbin      2015-07-26 21:29:19 +08:00 
                    
                    @loading 我觉得这里的分页应该是指分页的导航输出。 
                      https://github.com/lincanbin/Carbon-Forum/blob/master/common.php#L374 我这里写了一个,如果考虑的情况比较多,不是像V2EX这样简单的上一页下一页,写起来还是挺繁琐的。  | 
            
     23 
                    
                    laoyuan      2015-07-26 21:50:13 +08:00 
                    
                    分页我每隔一两年就重新写一次 
                 | 
            
     25 
                    
                    yakczh      2015-07-26 21:53:39 +08:00 
                    
                    google的那种分页,就是当前页在中间的样式 
                 | 
            
     26 
                    
                    gseven0312      2015-07-26 22:33:18 +08:00    别灰心,没有人能一步到位的,慢慢来 
                 | 
            
     27 
                    
                    Tink   PRO 嗯嗯,我也不会写,都是用框架自带的 
                 | 
            
     29 
                    
                    yuanji      2015-07-26 22:44:44 +08:00 
                    
                    
                 | 
            
     30 
                    
                    scourgen      2015-07-26 22:46:06 +08:00    分页还真不是简单能写好的,简直是一个细思恐极的话题。 
                1.如何自动根据查询语句去生成一个 count sql,算出有多少条信息,需要分多少页? 2.有没有不用计算一共有多少条也能分页的办法? 3.如何保证「1」的语句在不同的情况下都能正常运行? 4.如果你用了 distinct 的话,如何保证效率? 5.如果查询语句里有 union 之类的操作的话,该怎么办? 6.如果信息刷新很频繁,如何解决「第x页的最后一条内容被顶到x+1页的第一条」这个问题? 7.如何在实现以上几点的情况下做cache? 8.如何在实现「7」的基础上尽量提高命中率?  | 
            
     31 
                    
                    bombless      2015-07-26 23:03:26 +08:00    分页是有套路的,任何人熟悉一下都能写好,要想锻炼自己完全可以把精力放在更有创造力的事情上,分页的时候直接按照套路来就可以了。 
                 | 
            
     32 
                    
                    gzxultra      2015-07-26 23:04:35 +08:00 
                    
                    我以为是内核kernel的分页。。。果然最近kernel源码看多了。。。被拖走 
                 | 
            
     33 
                    
                    zjqzxc      2015-07-27 00:43:22 +08:00 
                    
                    @scourgen 貌似6的问题大多数人都避而不谈。。被顶到下一页第一个问题不大,一会儿工夫被顶到下一页最后一个这种情况应该就比较悲剧了。 
                 | 
            
     35 
                    
                    msg7086      2015-07-27 08:22:01 +08:00 
                    
                    gem install will_paginate 
                 | 
            
     36 
                    
                    vikeria      2015-07-27 08:28:08 +08:00 via Android 
                    
                    喵的,我第一反应是操作系统内存管理的分页,我愣了一下,卧槽,我好像也没写过,当即伤感了一会…… 
                 | 
            
     37 
                    
                    Ouyangan      2015-07-27 09:32:32 +08:00 
                    
                    哈哈写了三天,能用了... 
                 | 
            
     38 
                    
                    cheng007      2015-07-27 09:33:22 +08:00 
                    
                    @vikeria 哈哈,我的第一感觉也是,操作系统的内存管理的分页,话说这玩意,虚拟内存地址到物理地址的映射 
                我也没写过,只看过  | 
            
     39 
                    
                    aivier      2015-07-27 09:40:50 +08:00 
                    
                    嗯,作为一个前端不会分页查询好像也没什么不对啊 =_= 
                 | 
            
     40 
                    
                    ZHenJ      2015-07-27 10:10:17 +08:00 
                    
                    我的分页是用地址栏参数导航的。。。比你更菜,放心 
                 | 
            
     41 
                    
                    zhuangzhuang1988      2015-07-27 10:21:55 +08:00 
                    
                    这还要写?? 库里不是都提供了么??? 
                 | 
            
     42 
                    
                    server      2015-07-27 10:28:24 +08:00 
                    
                    10年 我的第一份工作 领导linux不会装 php(php5.2.x) iconv ,愣是让我把程序里的iconv 改成了mbstring, 
                这找谁说理去。  | 
            
     43 
                    
                    flydogs      2015-07-27 10:46:23 +08:00 
                    
                    分页很难的,要考虑sql的优化 
                最近就在烦这事  | 
            
     44 
                    
                    loading      2015-07-27 11:15:10 +08:00 via Android 
                    
                    
                 | 
            
     45 
                    
                    Felldeadbird      2015-07-27 11:50:22 +08:00    我也不会写分页。我也要看先别人的写法,才可以改造。楼主不要灰心。有些东西我们无法创造,但是我们可以站在巨人的肩膀上成功。 
                 | 
            
     46 
                    
                    billwang      2015-07-27 13:37:06 +08:00 
                    
                    分页一般都是copy改,很多东西网上都有轮子了,不用自己造。 
                 | 
            
     47 
                    
                    linxy      2015-07-27 13:45:40 +08:00 
                    
                    我认真的找出了自己写内核时关于分页一些笔记,翻出了自己的小内核代码… 
                写了几百字!! 看到有人说是网页的分页…… 又默默地删了……  | 
            
     49 
                    
                    caryxiao      2015-07-27 13:53:35 +08:00 
                    
                    多写写,多想想就熟了 
                 | 
            
     50 
                    
                    raincious      2015-07-27 14:15:18 +08:00 
                    
                    @loading  
                所以当俺给自己的模板引擎加了个Pagination产生器之后,瞬间感觉生活美好了很多…… https://github.com/raincious/facula/blob/wip/src/Facula/Unit/Paging/Compiler/Operator/Pager.php#L250 虽然代码本身是烂的一塌糊涂 不过就算产生了Pagination Links,缓存仍然是一个问题,所以请教下 @scourgen,如何较好的处理分页内容的缓存(问题7)?  | 
            
     53 
                    
                    fengyqf      2015-07-27 14:37:05 +08:00 
                    
                    找现成的代码直接用吧,码农不是经常自称“搬砖”吗,该搬砖的时候就得当搬运工。 
                 | 
            
     54 
                    
                    v3exhao      2015-07-27 14:38:21 +08:00 
                    
                    参考别人的,多加练习 
                 | 
            
     55 
                    
                    realpg   PRO 分页的轮子造了不计其数个…… 
                 | 
            
     56 
                    
                    dreamtrail      2015-07-27 15:02:29 +08:00 
                    
                    分页本来就不容易写完美,所以我都是用现成的分页模块 
                 | 
            
     58 
                    
                    ybh37      2015-07-27 16:53:30 +08:00 
                    
                    自己从前写到后就好了,后续不管用谁写的分页,都差不多…… 
                 | 
            
     59 
                    
                    vincenttone      2015-07-27 17:00:07 +08:00 
                    
                    学而不思或者思而不学,不仅仅是当不了程序员那么简单。 
                 | 
            
     60 
                    
                    zouxcs      2015-07-27 18:02:13 +08:00 
                    
                    是内存的分页么 
                 | 
            
     61 
                    
                    scourgen      2015-07-28 00:16:30 +08:00    既然大家有兴趣,就简单和大家说一下我的经验吧,但肯定不是完整的方案,因为每个case有很多需要注意的点和分支剧情,也要考虑到每个业务的具体场景,讲完整是不可能的。 
                @zjqzxc @TangMonk「6」这个问题可以用这个思路,比如内容是以时间排序的,那么就在每次查询的时候自动多带一个参数,也就是用户访问的时间点,并且在翻页的过程中记住这个时间点,在每页的查询语句里设置内容创建的时间要早于这个时间,这样用户不管翻多少页,由于有这个limit在,只要不删数据(即使删数据也可以用每页cache的方法,做到不影响其他页),总的结果集是固定的,所以每页的内容就是固定的。在用户重新进入第一页的时候,这个时间重新计算,这样就可以既不影响翻贴用户的阅读体验,又能够保证用户想看新内容的时候能够看的到。 当然如果你是做APP之类的瀑布流信息展现方式的话,就用Last_ID之类的方案好了,不过其实瀑布信息流也不应该叫做分页。 @raincious 「7」和「8」这两个问题和业务场景结合的很深,但总的来说是一个平衡问题,在以下两者之间取得一个平衡: 1.以每页为cache单位,这样内容一旦增加(例如新增了一条信息在第一页),那所有的cache都应该被清空重建。这个策略在数据刷新很频繁的时候效率最低,在数据变更不频繁的时候效率最高。 2.以每条内容为cache单位,这样一旦有新数据出现,不会有任何旧的cache被重建,只要每条数据不删不改,cache是可以一直用下去的,所以在数据刷新很频繁的时候效率较高,但这样cache会分布的很散,所以在数据刷新不频繁的时候效率会较低(分支剧情:如果你可以用redis的hmget的话当我没说)。 两者你都无法接受的话,就可以考虑结合他们的优势,去做group cache,比如每页20条数据,你每10条数据做一个cache,这样悲观情况下取3次就能拿到整页的内容,乐观情况下2次即可,具体group里放数据的数量要根据你的使用场景去订。分支剧情:但如果这样做的话,就要考虑如果数据删除的话,会造成cache不对齐,那这时候你就可以考虑在每个group里前后多加x条数据,这样即使数据有改动,只要不是太频繁,就能做到现有的cache的重复利用。不过这个分支剧情貌似走的人比较少,对逻辑的严密性也比较高,在此只是提一下就不展开了。 随便写写,一定有错,求别抬杠,求别黑,谢谢。  | 
            
     62 
                    
                    final0pro      2015-07-28 05:42:46 +08:00 
                    
                    real time pagination like facebook and twitter is difficult to implement. 
                You can find more information here: http://www.sitepoint.com/paginating-real-time-data-cursor-based-pagination/  |