我需要在大型数据库表中找到记录的索引位置,以便将寻呼机预设到该项目的页面。我需要一个有效的SQL查询,可以给我这个号码。遗憾的是,SQL没有提供类似的东西:
SELECT INDEX(*) FROM users WHERE userid='123'
有什么好主意吗?
编辑:让我们假设附加了一个ORDER BY子句。关键是我不想加载所有记录来定位特定记录的位置。我正在尝试打开一个寻呼机到包含以前被选中的现有项目的页面 - 因为我想在上下文中提供有关已经选择的项目的信息,允许用户选择不同的项目。
答案 0 :(得分:3)
您可能会使用类似(伪代码)的内容:
你应该真正看看pager_query,因为这就是它的全部内容,它基本上是这样的:计数查询和显示查询,除了它试图自动构建计数查询。
答案 1 :(得分:1)
假设您真的在询问如何在SQL Server 2005之后分页记录,请查看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
答案 2 :(得分:0)
除非使用OrderBy子句,否则SQL不保证表中对象的顺序。换句话说,任何特定行的索引可能在后续查询中发生变化。你能描述一下你试图用寻呼机完成什么吗?
答案 3 :(得分:0)
您可能对MySQL中simulates the rownum()
的某些内容感兴趣...如果您使用的是MySQL,那么问题中没有指定。
备注强>:
当然,您必须浏览网页的所有记录。您不需要从数据库服务器将它们提取回PHP页面,但您必须将它们包含在查询中。除了查询结果集之外,确定结果集中行的位置没有神奇的技巧,因为它可能因为where条件,顺序和组而改变。它需要在上下文中。
当然,如果所有行都是连续的,使用增量ID,则不删除任何行,并且您知道第一个和最后一个ID;然后你可以使用计数和简单的数学获得位置而不查询一切....但我怀疑这是你的情况,它永远不会。