2011-01-17 3 views
0

У меня есть база данных со стихами из библии с этими полями: книга (номер книги), глава (номер главы), стих (стих), текст (стих)Выбор диапазона стихов из базы данных

пример: 1 1 1 В начале Бог сотворил небо и землю.
первый 1 для Genesis, второй 1 для Глава 1, третий 1 для стиха 1

пользователь дает мне что-то вроде 1 1: 1 - 1 1: 4, что означает, что он хочет чтобы показать Бытие 1: 1-4.

то, что я хочу сделать что-то вроде
SELECT (book*1000000+chapter*1000+verse AS index) FROM bible WHERE index >= 1001001 AND index <=1001004
или
WHERE book*1000000+chapter*1000+verse >= 1001001 AND book*1000000+chapter*1000+verse <= 1001004

+2

Вы могли бы хотеть рассмотреть движение миллионов за книгу, заказать 3 цифры для псалмов, который имеет более 100 глав. – RichardTheKiwi

+1

Каков ваш вопрос? Что-то не работает с вашим sql выше? –

ответ

1

Я бы предложил один индекс столбца, но вместо того, чтобы каждый раз вычислять его для запроса (который выполняется в 1000 раз медленнее) формула «книга» 1000000 + глава * 1000 + стих ».

UPDATE bible 
SET index = book * 1000000 + chapter * 1000 + verse 

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

SELECT index, verse 
FROM bible 
WHERE index >= 
    Forms!f!startBook * 1000000 + Forms!f!startChapter + 1000 + Forms!f!startVerse 
AND index <= 
    Forms!f!endBook * 1000000 + Forms!f!endChapter + 1000 + Forms!f!Verse 

Если вы должны использовать вычисляемый столбец каждый раз (у меня есть более чем намек, что это больше, чем 1мс), то

SELECT index_, verse 
FROM (select book * 1000000 + chapter * 1000 + verse as index_, * from bible) B 
WHERE index_ >= 1 AND index_ <= 2 

Где два? являются ASP-заполнителями для параметров. Предвычислять индекс, используя ту же самую формулу

startIndex = Request("sbook") * 1000000 + Request("schapter") * 1000 + Request("sverse") 
+0

Я использую его с ASP/VBscript. Я хочу, чтобы моя база данных была самой маленькой. Поэтому я предпочитаю добавлять 1 мс для загрузки страницы, кроме наличия избыточных данных в моей базе данных. Спасибо –

0

это работает: Выделите текст из Библии, где книга * +1000000 + глава * 1000 + стих> = "& из &" И книга * 1000000 + глава * 1000 + verse < = "& last

Смежные вопросы