2013-12-16 174 views
-3

有什么办法从索引获取指向行的指针?或者有更好的方法来做到这一点。让我来解释一下......获取指向索引行的指针

表:在book_type + book_number + page-number上带有INDEX的书籍。所有这些字段都是字符和填充以填充其固定大小。

其他字段包括作者,ocr_text和日期。

现在我们来做一个:

select 
    author, 
    ocr_text, 
    date 
from 
    books 
where 
    author='jim' 
    and ocr_text contains 'red oak tree' 
    and between(date, '01/01/2013', '12/15/2013') order by author 

...是的,我认识的一些语法是不正确的,但无论如何我得重新设置的结果与查询匹配。现在让我们说我们的结果集有:

Deed Book  | 232 | Page 124  
Deed Book  | 436 | Page 444  
Mortgage Book | 474 | Page 654 

注意,这些结果匹配什么查询请求......到目前为止,没有问题,因为它为我们提供了我们所期望的。

我们的表单中有按钮“FIRST HIT”,“PREV HIT”,“NEXT HIT”和“LAST HIT”,它们遍历我们上面列表中的匹配查询命中。 我们的表单还有另外2个按钮“PREV PAGE”和“NEXT PAGE”,它们可以模拟书中翻页的内容,而且不会影响查询结果。换句话说,假设我们第一次到达“契约书第232页”,然后按下“上一页”按钮,我们应该看到该页面的左边(前一个)。还要注意的是,无论我们正在查看的页面按下“上一页”,我们总是会将页面转到上一页,而按下“下一页”将始终使我们转到下一页,而不考虑查询结果。这些导航到的下一页和上一页可能并可能不在我们的查询结果中,因为它按库顺序导航库而不考虑查询结果。上面提到的索引是图书馆订单指数。

现在,假设我们想立即查看页面“Deed Book 232 Page 124 SubPg 1”,即“Deed Book 232 Page 123 SubPg 1”,或者它可以是“Deed Book 232如果没有124到99之间的页面。

我没办法想到,允许我从任何给定的地方以图书馆顺序查找prev行作为它唯一的关系是“他们在彼此身边”,而没有别的。除了读取此库索引之外,我无法看到在新项目不断进入的动态环境中,使主键/外键或任何其他列关系工作。所以除非有人想出了什么东西,否则我看到这个工作的唯一方式就是读某个指向prev和next行的指针的库索引。

是的,我知道SQL Server没有任何记录的概念。我来自一个VFP背景,其中这种东西很容易...

谢谢你,斯坦利

+0

你已经拿到了3个关键索引的感觉,但你存储'CHAR页码()' 。获取给定书籍的所有结果并按页码对其进行排序很简单。 –

回答

0

指标,通常不要求有这样的事情。

的伪:

FIRST HIT = SELECT the MIN(whatever) 
PREV HIT = SELECT the MAX(whatever) that is < the CURRENT(whatever) 
NEXT HIT = SELECT the MIN(whatever) that is > the CURRENT(whatever) 
LAST HIT = SELECT the MAX(whatever) 

因此,例如,上一个HIT:

select 
    book, 
    max(page) 
from 
    books 
where 
    book = @book --(@book is the current book -- passed-in as a parameter) 
    and page < @page --(@page is the current page -- passed-in as a parameter) 
+0

这些第一次击中,上一击,下一击以及上次击中按钮代码不是问题所在。它的PrevPage和NextPage按钮必须选择一个与用户查询无关的页面。我再次详细解释这个问题,重新审视这个问题。谢谢,斯坦利 –

+0

@StanleyBarnett - 你已经将问题标记为'sql' - 这就是为什么我用sql来回答它的原因。如果你需要帮助你的按钮,而不是sql,那么你需要指出你正在使用哪种技术/你想要解决问题的层。Asp.net?什么类型的控件 - 列表视图?网格视图?习惯吗? – Chains