Как запросить базу данных SQL, чтобы вернуть первую «страницу», содержащую указанные данные? - PullRequest
0 голосов
/ 27 августа 2010
------------------------
|      |     A   |     |
------------------------
|      |     B   |     |
------------------------
|      |     C   |     |
------------------------ -----Page 1
|      |     D   |     |
------------------------
|      |     E   |     |
------------------------
|      |     F   |     |
------------------------ -----Page 2
|      |     F   |     |
------------------------
|      |     F   |     |
------------------------
|      |     G   |     | -----Page 3

Пожалуйста, извините за мое искусство ascii, никогда не делал этого раньше.

У меня есть база данных со вторым столбцом, отсортированным, как показано выше. База данных отображается для пользователя в виде «страниц» по 3 строки в каждой.

Затем пользователь собирается искать (через текстовый ввод) некоторые данные из отсортированного второго столбца и хочет, чтобы была возвращена страница с первым вхождением этих данных.

Например, пользователь вводит «F», возвращается страница 2, поскольку она содержит первое вхождение F в этом порядке сортировки.

Например, пользователь вводит «C», возвращается страница 1, поскольку она содержит первое (и единственное) вхождение C в этом порядке сортировки.

Какой запрос сделать это?

Моя первая мысль - найти строку первого вхождения, вычислить, на какой странице он находится, и затем запросить эту страницу как обычно. Это самый эффективный способ или есть какая-то встроенная функциональность.

Спасибо.

-SQL (через C ++ API)
-Визуальная Студия 2003.NET

Ответы [ 2 ]

2 голосов
/ 27 августа 2010

Я думаю, что ваша первая мысль была правильной.Это потому, что не очень часто иметь «скрытую информацию» в вашей базе данных и основывать запросы на этом.Ваша скрытая информация здесь - это то, на какой странице что-то находится, а это просто основано на том, какая строка отсортирована по определенному столбцу.

Однако существуют разные способы решения этой проблемы.Я думаю, что наиболее распространенным является не отображение страницы 2, когда пользователь ищет F, а отображение страницы 2.66 (которая также имеет три элемента).У него есть некоторые недостатки, но он также имеет преимущества перед вашим методом.Другим способом было бы добавить в таблицу столбец, описывающий, на какой странице что-то есть.Это имеет тот недостаток, что, пока вы придерживаетесь «деления формулы», это избыточные данные.Это также проблематично, если данные добавляются в любое другое место, кроме «конца» таблицы.Он обладает дополнительной гибкостью, благодаря которой вы можете выбрать для определенной страницы дополнительный элемент.

1 голос
/ 27 августа 2010

У меня есть база данных со вторым столбцом, отсортированным, как показано выше.

Нет, нетТаблицы SQL неупорядочены.У вас есть SELECT результат, который просто оказывается в ROWID порядке в качестве детали реализации .Если вы хотите основывать запросы на номере строки, то это должен быть явный столбец:

CREATE TABLE T(
    ID        INTEGER PRIMARY KEY AUTOINCREMENT,
    Letter    CHAR
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...