代码之家  ›  专栏  ›  技术社区  ›  T.T.T.

如何查询SQL数据库以返回包含指定数据的第一个“页”?

  •  0
  • T.T.T.  · 技术社区  · 16 年前
    ------------------------
    |      |     A   |     |
    ------------------------
    |      |     B   |     |
    ------------------------
    |      |     C   |     |
    ------------------------ -----Page 1
    |      |     D   |     |
    ------------------------
    |      |     E   |     |
    ------------------------
    |      |     F   |     |
    ------------------------ -----Page 2
    |      |     F   |     |
    ------------------------
    |      |     F   |     |
    ------------------------
    |      |     G   |     | -----Page 3
    

    请原谅我以前从未做过。

    我有一个数据库,第二列的排序如上图所示。数据库以“页面”的形式向用户显示,每个页面有3行。

    然后,用户将搜索(通过文本输入)排序后的第二列中的一些数据,并希望返回的页面具有该数据的第一次出现。

    例如,用户输入“F”,返回第2页,因为它包含按此排序顺序出现的第一个F。

    例如,用户输入“C”,返回第1页,因为它包含按此排序顺序出现的第一个(也是唯一一个)C。

    我的第一个想法是找到第一个出现的行,计算它在哪一页,然后按常规查询该页。这是最有效的方法,还是有一些内置的功能。

    非常感谢。

    SQLite(通过C++ API)
    -Visual Studio 2003.NET

    2 回复  |  直到 16 年前
        1
  •  2
  •   Jasper    16 年前

    我认为你的第一个想法是正确的。这是因为在数据库中有“隐藏信息”并基于此进行查询不是很正常。你的

    不过,有不同的方法来解决这个问题。我认为,最常见的方法不是在用户搜索F时显示第2页,而是显示第2.66页(其中还有三个项目)。它有一些缺点,但也比你的方法有优势。另一种方法是向表中添加一列,该列描述某个内容在哪个页面上。这样做的缺点是,只要坚持“公式划分”,就是冗余数据。如果将数据添加到表的“末尾”以外的任何其他位置,也会产生问题。它确实增加了灵活性,您可以决定为某个页面提供一个额外的项。

        2
  •  1
  •   dan04    16 年前

    列排序如上所示。

    SELECT 结果是 只是碰巧 ROWID 秩序 作为实施细节

    CREATE TABLE T(
        ID        INTEGER PRIMARY KEY AUTOINCREMENT,
        Letter    CHAR
    );