代码之家  ›  专栏  ›  技术社区  ›  Scott Evernden

表中记录的索引

  •  1
  • Scott Evernden  · 技术社区  · 17 年前

    我需要在大型数据库表中找到记录的索引位置,以便将寻呼机预设到该项的页面。我需要一个有效的SQL查询,可以给我这个数字。遗憾的是,SQL不提供以下内容:

    SELECT INDEX(*) FROM users WHERE userid='123'
    

    有什么好主意吗?

    编辑:假设有一个ORDERBY子句附加到该子句。关键是我不想加载所有记录来定位特定记录的位置。我试图打开一个页面,该页面包含以前选择的现有项目,因为我想在允许用户选择其他项目的上下文中提供有关已选择项目的信息。

    4 回复  |  直到 17 年前
        1
  •  3
  •   FGM    17 年前

    您可以使用类似(伪代码)的代码:

    • 计数查询:$n=从{users}中选择计数(uid),其中。。。(您的分页条件包括userid 123作为限制)
    • $page=地板($n/$pager\U尺寸);

    你真的应该看看 pager_query

        2
  •  1
  •   Mitch Wheat    17 年前

    假设您真的想知道如何在SQLServer2005以后的版本中对记录进行分页,请从 David Hayden

    (您需要将日期、说明更改为您的列)

    CREATE PROCEDURE dbo.ShowUsers
        @PageIndex INT, 
        @PageSize INT 
    AS
    
    BEGIN 
    
      WITH UserEntries AS ( 
      SELECT ROW_NUMBER() OVER (ORDER BY Date DESC) AS Row, Date, Description 
      FROM users)
    
      SELECT Date, Description
      FROM UserEntries 
      WHERE Row BETWEEN (@PageIndex - 1) * @PageSize + 1 AND @PageIndex * @PageSize
    
    END 
    
        3
  •  0
  •   Jason    17 年前

    SQL不保证表中对象的顺序,除非使用OrderBy子句。换句话说,任何特定行的索引都可能在后续查询中更改。你能描述一下你想用寻呼机完成什么吗?

        4
  •  0
  •   lpfavreau Arthur Debert    17 年前

    simulates the rownum() Oracle在MySQL中的应用。。。当然,如果您使用的是MySQL,因为问题中没有指定它。


    笔记 :

    当然,你必须检查你页面上的所有记录,这样才能正常工作。您不需要从数据库服务器将它们取回PHP页面,但必须将它们包含在查询中。除了查询结果集之外,没有什么魔术可以确定您的行在结果集中的位置,因为它可能会因为where条件、顺序和组而改变。它需要结合实际情况。