2013-12-16 120 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