代码之家  ›  专栏  ›  技术社区  ›  Dan

从数据库中选择X和Y之间的行

  •  1
  • Dan  · 技术社区  · 15 年前

    我有一个返回30行的查询。我正在编写代码,通过Ajax调用将这30行分页为每页5条记录。

    1. 是否有任何理由只返回表示层上的5条记录?在速度方面会有什么好处吗?或者它只是让引擎盖下面的所有行都有了?

    2. 如果是这样,在Sybase中我该如何做呢?我知道Oracle有rownum,MS SQL也有类似的功能,但在Sybase中似乎找不到类似的功能。

    5 回复  |  直到 15 年前
        1
  •  3
  •   John M Gant aman_novice    15 年前

    除非您的记录长度很大,否则5行和30行之间的差异对于用户来说应该是完全不明显的。事实上,多个DB调用有很大的潜在危害,它不仅会对性能造成帮助,还会对性能造成更大的危害。只需将所有30行返回到中间层或您的演示文稿中,无论什么更有意义。

        2
  •  0
  •   D'Arcy Rittich    15 年前
        3
  •  0
  •   MusiGenesis    15 年前

    我从未与Sybase合作过,但这里有一个链接可以解释如何做类似的事情:

    http://www.dbforums.com/sybase/1616373-sybases-rownum-function.html

    由于解决方案涉及一个临时表,所以也可以使用它进行分页。在初始查询中,将30行放入一个临时表中,并为页码添加一列(前五行是第1页,后五行是第2页,依此类推)。在随后的页面请求中,可以按页码查询临时表。

    不过,你不知道怎么清理临时工作台。也许当用户的会话超时时?

    对于30个记录来说,可能根本不值得为分页而烦恼。

        4
  •  0
  •   Gratzy    15 年前

    我想在Sybase你可以使用

    select top 5 * from table 
    where order-by-field > (last record of previous calls order-by-field)  
    order by order-by-field
    

    每次使用相同的顺序。

    至于好处,我想这取决于我们说了多少行,桌子有多大等等。

        5
  •  0
  •   Nick Larsen    15 年前

    我完全同意JMGANT的观点,但是,如果您无论如何都想这样做,那么过程是这样的:

    1. 选择前10项并存储在X中
    2. 选择前5项并存储在Y中
    3. X-Y

    整个过程可以在1个SQL语句中进行。